一、排序
1、应用
a、一些程序需要有序的输出,二分查找之类的程序需要一个有序的输入。
b、收集相同项:使用排序来收集序列中相同的项,后缀数组收集相同的单词。
2、算法
a、插入排序:O(n^2)的最坏时间,如果给一个大致有序的数组进行排序,则只需要O(n)时间,是稳定的。
b、快速排序:最优时间O(nlogn),最坏情况O(n^2)时间O(n)空间
c、堆排序:任何情况都是O(nlogn)时间
d、其他:归并排序,选择排序,希尔排序
e、基数排序
f、位图排序:序列中的整数在一个范围内,没有重复的数,没有额外的数据。
二、查找
1、算法
a、线性查找
b、二分查找:有序数组
c、哈希
d、二叉查找树
e、关键字索引:bins,bit vectors
f、其他:通过cache减少时间
三、其他
解决含有重复元素的n个元素的集合问题
a、优先队列:有insert和extractmin操作,使用堆
b、选择:选择k个最小的元素
四、字符串算法
a、找出文本中中不同的单词和每个单词出现的次数:使用map 或者 使用哈希
b、寻找文本中重复子字符串中最长的一个:使用后缀数组
c、生成随机文本:使用后缀数组,马尔科夫链
五、向量矩阵算法
六、随机数
七、数值算法
代码优化方案
一、空间换时间
1、扩张数据结构,增加额外信息,或者改变更加合适的数据
2、存储预先计算好的结果
3、caching
4、直到需要时才处理
二、时间换空间
1、打包
2、解释器
三、循环
1、将固定的计算移出循环
2、合并测试:哨兵,放置一个哨兵在数据结构的临界处
3、铺开循环
来源:https://www.cnblogs.com/daniagger/archive/2012/05/05/2484675.html