编程珠玑总结

一、排序

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、铺开循环

你可能感兴趣的:(编程珠玑)