好久没发点有趣的东西了,今天发个来看看。
上个星期raven给了我一组有趣的统计图。跟大家分享下吧~
下面是对几种排序算法的性能的统计图。
x轴是输入数组的大小,从1000到10000;y轴是消耗的时间,单位为ms。
每条统计线所代表的排序算法如底部的图例所示。
每张图代表一种输入类型的状况。
Sorted表示输入是已经排好序的(按照从小到大),
almost-sorted表示大约有20%的元素是不符合顺序的,
reverse表示顺序是颠倒的(按照从大到小排序),
random表示随机的输入。
看不到大图的请点击放大。
可以看到,有好几种排序算法在这个统一坐标上都看不出什么端倪(相对来说太快了……),
而selection sort则很稳定的呈现出平方级的增长。
把坐标轴重新设定一次,再看看状况如何:
(注释:
Shellsort-A采用的是Shell提出的数列,从floor(N/2)开始每次除以2;
Shellsort-B采用的是另一种数列,从floor(N/2)开始每次除以3。
Quicksort-A是采用输入数组在中间位置的元素为分隔点;
Quicksort-B是采用median-of-three为分隔点;
Quicksort-C是采用median-of-five为分隔点;
Quicksort-D是采用输入数组的实际中值为分隔点
)
raven同学或许过段时间会把题目和代码都放出来吧。这家伙最近也是忙。
更新:raven同学发帖了,http://ravenex.iteye.com/blog/175557。要看源代码的去那里看……
统计实验是在这样的配置上:
Pentium 4 HT 3.20GHz
1GB DDR
JRE 1.6.0 update 3
不知道为什么,无论怎么调节实验次数的参数,出来的结果都会很“抖”。
我在我的老笔记本上也跑过这个实验,就一点都不“抖”,但是比这里的图要慢多了。
P.S. 统计图是用JFreeChart画的。呼,这库我2年前用得快吐血了……源码开放,文档要卖钱,这算盘打得真是响当当的。
分享到:
相关推荐
根据给定文件的内容,以下是对学习的几种排序算法的详细知识点总结。 1. 冒泡排序(BubbleSort): 冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换...
在VC++环境中,这四种排序算法的性能比较可以从以下几个方面进行: 1. **执行时间**:通过测量每种算法对相同数据集进行排序所需的时间,可以评估它们的效率。快速排序和归并排序通常比冒泡排序和插入排序更快,...
本文介绍了一种名为OFE(Order-statistic Filter Edge)的边缘检测算法,该算法基于统计排序滤波。统计排序滤波是一种有效的降噪方法,它利用了统计学原理对像素进行排序和处理,可以有效地去除脉冲噪声。在OFE算法...
算法的涵盖范围广泛,包括排序算法(如冒泡排序、快速排序)、查找算法(如二分查找)以及递归等概念。在高考数学中,可能会考察学生对这些基本算法的理解和应用能力,比如如何通过算法解决实际问题,优化计算效率等...
- 对每种排序算法进行时间复杂度分析,通过比较关键字比较次数和关键字移动次数来评估其效率。 - 生成随机数据,确保测试的公正性,数据量至少为100,且使用多组不同的输入数据。 - 改变数据量,观察统计结果的...
本文将介绍三种必抓算法:排序算法、搜索算法和图算法,并对其定义、特点和应用场景进行详细介绍。 一、排序算法 排序算法是一种能够将一组数据按照特定顺序进行排列的算法。常见的排序算法包括冒泡排序、选择排序...
- 尝试修改源码,实现不同版本的拓扑排序算法,如深度优先搜索(DFS)和广度优先搜索(BFS)两种方法。 - 实际运行代码,使用不同的有向无环图输入,观察和验证拓扑排序的结果。 总的来说,"简单拓扑排序——源码...
1. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些排序算法各有特点,如冒泡排序适合小规模数据,快速排序则在大数据集上表现出色。 2. **查找算法**:如线性查找、二分查找。线性...
6. 堆排序:利用堆这种数据结构所设计的一种排序算法。 这些排序算法各有优劣,例如冒泡排序和插入排序简单易懂,但在大规模数据下效率较低;而快速排序和归并排序具有较好的平均性能,但归并排序需要额外的存储...
- **快速排序算法**:讲解了快速排序算法的具体实现和性能分析。 #### 第八章:线性时间中的排序 - **基数排序**:介绍了一种基于数字位的排序方法——基数排序。 - **桶排序**:讨论了桶排序的基本思想及其应用...
此外,该章节还介绍了递归公式求解的几种方法,包括替换法、递归树法和主定理,这些方法都是评估和优化递归算法的关键工具。 ### 概率分析与随机化算法 第五章转向概率分析和随机化算法,这是算法设计中的一个高级...
**解决方案**:本章的习题解答帮助学生理解每种线性时间排序算法的应用条件,并能够根据实际情况选择最适合的算法。 ##### 第9章:中位数与序统计量 **讲座笔记**:本章介绍了如何寻找数组中的第k小元素,以及如何...
在本课程设计中,学生需要实现这两种排序方法以及其他几种排序算法,并通过比较它们的性能来选择最快的方法。 希尔排序是一种改进的插入排序,由希尔(Shell)提出,通过将待排序的数据分割成多个子序列,然后对每...
在C++中,可以定义一个基类,比如`SortAlgorithm`,然后为每种排序算法创建一个派生类,每个派生类实现排序函数。这样做的好处是,我们可以通过基类的指针或引用调用不同的排序算法,增强了代码的可扩展性和可维护性...
- **主题概述**:这些章节介绍了几种常见的算法设计策略。 - **关键概念**: - 动态规划:通过存储子问题的解来避免重复计算,适用于具有重叠子问题和最优子结构的问题。 - 贪心算法:在每一步选择当前看起来...
1. **排序算法**:如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。这些排序算法的实现有助于理解不同时间复杂度和空间复杂度的比较,以及在不同场景下的适用性。 2. **查找算法**:包括线性查找、...
- **第二部分:排序和序统计**(详细讨论了各种排序算法和相关的数据结构) #### 四、重要概念和方法 - **算法的定义**:算法是一组明确指令的集合,用于解决问题或执行计算任务。 - **算法的重要性**:算法是...
本文将详细介绍几种常见的图像去噪算法,并通过Matlab代码演示这些算法的实际应用。 #### 二、常见噪声类型 在数字图像系统中,常见的噪声类型包括: 1. **高斯噪声**:通常由于阻性元件内部产生的随机热运动引起...