为什么要分析算法
分析算法可以预测算法的性能,比较算法之间的优劣,保证算法的正确性,理解算法的理论基础。
成功算法的例子
离散傅立叶变换,如果使用暴力方法,那么算法的复杂度是是N^2,如果使用FFT快速傅立叶变换可以实现O(N logN)复杂度
N-body模拟:使用Barnes-hut算法可以将复杂度降低到N logN
...
分类:
其他好文 时间:
2014-06-03 00:10:12
阅读次数:
364
这章通过一个简单的例子,详细说明算法分析的步骤。
算法
问题
给定N个不同的整数,从中任意取出三个整数。请问有几种情况,使得取出的3个整数之和为0?
解法
可以使用暴力算法,代码如下:
1
2
3
4
5
6
7
8
9
for(int i=0;...
分类:
其他好文 时间:
2014-06-02 23:18:43
阅读次数:
320
讲完了算法的运行时间,现在讲一下关于算法的内存占用率。
内存单位
在计算机中,内存是通过字节来表示的,一个字节表示8个位。1KB是2^10字节。
数据类型占用的内存
在32位系统中,一个指针占用4个字节。在64位系统中一个指针占用8个字节。本课程中使用64位机器,一个指针占用8字节。
基本数据类型
...
分类:
其他好文 时间:
2014-06-01 16:24:44
阅读次数:
204
本节主要讲解的是算法的复杂度。
算法性能
算法的性能分为三种:
最佳情况:计算时间最短的情况
最差情况:计算时间最长的情况
平均情况:随机输入的期望开销
以二分查找为例
最佳情况是1,因为第一次就有可能找到需要找的整数。
最差情况是logN
平均情况是logN
算法复杂度
...
分类:
其他好文 时间:
2014-06-01 15:57:46
阅读次数:
220
本节讲的是并查集的第一种实现方法,这种方法查找操作开销很小而合并操作开销比较大。
数据结构
假设有N个节点,那么该算法的数据结构就是一个包含N个整数的数组id[]。
判断操作
判断节点p和节点q是否相连就是判断id[p]和id[q]的值是否一致。
合并操作
合并节点p和节点q就是将id数组中所有的id[...
分类:
其他好文 时间:
2014-06-01 14:55:21
阅读次数:
202
本节讲的是并查集的另外一种实现方法。这种方法的合并操作开销很小,但是查找操作开销很大。
数据结构
这种算法的数据结构和快速查找方法的数据结构是一样的,也是N个整数组成的数组。
数组中每个元素id[i]的含义是指i的上级是id[i]。
根节点
一个节点的根节点就是id[id[id[...id[i]....]]],一直循...
分类:
其他好文 时间:
2014-06-01 14:52:52
阅读次数:
225
本节讲的是并查集的基本概念。
算法的开发步骤
对问题进行数学建模
寻找一个能够解决问题的算法
运行算法检测速度和内存是否符合要求
如果达不到要求,找出原因
寻找一种方法来解决问题
循环步骤,直到满意为止
以上就是算法开发比较科学的方法。算法开发完成之后需要进行数学分析。
并查集问题
...
分类:
其他好文 时间:
2014-06-01 14:15:14
阅读次数:
185
上面讲到的知识点在这个示例都有涉及。另外我这里也只是分析部分重要的代码,更多的知识了解请自行下载代码(文章最下面有地址)并结合公开课一起看...
分类:
移动开发 时间:
2014-06-01 14:13:12
阅读次数:
316
课程介绍
这门课程核心内容是算法和数据结构。
具体的算法和数据结构如下:
数据类型:堆栈、队列、背包、并查集、优先队列。
排序:快排、并排、堆排、基数排序
查找:BST、红黑BST、哈希表
图:BFS、DFS、Prim、Kruskai、Dijkstra
字符串:KMP、正则、TST、哈夫曼、LZW
高级:B树、后缀数组、最...
分类:
其他好文 时间:
2014-06-01 10:52:26
阅读次数:
285
本节主要通过建立数学模型,来计算算法的运行时间。
公式
算法的运行时间=所有操作的开销乘以操作的次数之和
开销
下表展示了各种操作所需要的时间(单位:纳秒)
整数加法 2.1
整数乘法 2.4
整数除法 5.4
浮点加法 4.6
浮点乘法 4.2
浮点除法 13.5
sin 91.3
...
分类:
其他好文 时间:
2014-06-01 10:42:00
阅读次数:
228