1. 并查集. 维护等价关系的更新和查询的数据结构
http://en.wikipedia.org/wiki/Disjoint-set_data_structure
2. KMP字符串匹配算法
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm
3. BFPRT算法. 寻找第k大元素的线性算法
名字来源于发明算法的五位大牛: Blum,Floyd,Pratt,Rivest,Tarjan
http://en.wikipedia.org/wiki/Selection_algorithm#Linear_general_selection_algorithm_-_Median_of_Medians_algorithm
http://en.wikipedia.org/wiki/Median_of_medians
4. 二分查找算法
http://en.wikipedia.org/wiki/Binary_search_algorithm
5. Floyd-Warshall算法. O(N^3) 计算给定加权图任意两点间最短路径长度
给定加权图的边上权重可正可负, 只要不包含负权圈即可。(如果存在负权圈, 圈内任意两点间最短路的长度为-inf)
http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
6. 快速排序算法
http://en.wikipedia.org/wiki/Quicksort
7. 欧几里德算法. 快速计算最大公约数算法
http://en.wikipedia.org/wiki/Euclidean_algorithm
8. 霍夫曼编码. 用于数据压缩
http://en.wikipedia.org/wiki/Huffman_coding
9. 素性判断算法
Miller-Rabin算法: http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test
AKS算法: http://en.wikipedia.org/wiki/AKS_primality_test (确定性的多项式时间素性判断算法)
10. Fully Homomorphic Encryption Scheme (全同态加密方案)
同态是一个数学概念,如 H(f(a, b)) = F(H(a), H(b)), H(.)是一个同态映射
假设加密操作为E(.), 明文为m, 密文为e, 如果针对明文的操作f,可以根据E构造出F,使得 E(f(m)) = F(e). 那么E就是一个针对f的同态加密算法。 如果f可以支持加法和乘法, 那么E就是全同态加密算法
同态加密有非常明显的使用场景: 允许第三方在密文e的基础上进行F操作。 我们拿到处理完的结果F(e)后进行解密可以得到我们期望的结果f(m), 而第三方在整个过程中都不了解明文m。
Craig Gentry在2009年提出的全同态加密方案论文: A Fully Homomorphic Encryption Scheme http://crypto.stanford.edu/craig/craig-thesis.pdf
2009年底针对计算效率优化后的简化版本 BGV System: Fully Homomorphic Encryption over the integers http://eprint.iacr.org/2009/616.pdf
http://portal.acm.org/citation.cfm?id=1666420.1666445
整数上全同态加密方案分析(1)--献给全同态加密的初学者 http://blog.sciencenet.cn/blog-411071-617182.html
整数上全同态加密方案分析(2)--献给全同态加密的初学者 http://blog.sciencenet.cn/blog-411071-617185.html
整数上全同态加密方案分析(3)--献给全同态加密的初学者 http://blog.sciencenet.cn/blog-411071-617188.html
开源 HELib: https://github.com/shaih/HElib
11. Schwartz-Zippel lemma - 多项式快速等价判定
http://en.wikipedia.org/wiki/Schwartz%E2%80%93Zippel_lemma
12. Depth First Search (深度优先搜索)
http://en.wikipedia.org/wiki/Depth-first_search
13. 快速傅立叶变换
http://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm
http://en.wikipedia.org/wiki/Butterfly_diagram
14. Eratosthenes筛法
http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
15. Horner's Algorithm/秦九韶算法
http://en.wikipedia.org/wiki/Horner_scheme
16. Strassen algorithm 矩阵乘法算法
http://en.wikipedia.org/wiki/Strassen_algorithm
17. 后缀数组的线性构造算法
http://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf
18. 2-approximation for MAX-CUT
对于最大化问题,2-approximation max-cut算法是一个简单的随机算法,能得到超过最优解1/2的近似解。
http://en.wikipedia.org/wiki/Maximum_cut
回复中,提到一篇提出最大化次模函数的常数近似比算法的论文
http://theory.stanford.edu/~jvondrak/data/submod-max-SICOMP.pdf
19. 高斯消元法
http://en.wikipedia.org/wiki/Gaussian_elimination
20. Reservoir sampling (蓄水池采样)
http://en.wikipedia.org/wiki/Reservoir_sampling#cite_note-1
21. Dijkstra's algorithm - 单源最短路问题
http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
22. 稳定婚姻问题算法
http://en.wikipedia.org/wiki/Stable_marriage_problem
23. grover量子搜索算法
一个需要O(log N)空间和O(sqrt(N))时间对N个无序元素进行排序的概率算法。
http://en.wikipedia.org/wiki/Grover%27s_algorithm
24. Tortoise and hard algorithm - 圈检测
http://en.wikipedia.org/wiki/Cycle_detection
25. 线性规划算法:单纯形法, 椭球法, 内点算法
http://en.wikipedia.org/wiki/Linear_programming#Algorithms
26. Robin Moser algorithm - 解决特定类型SAT问题
http://en.wikipedia.org/wiki/Algorithmic_Lov%C3%A1sz_local_lemma
http://arxiv.org/abs/0903.0544
27. Christofides's algorithm - 3/2 approximation for metric TSP
http://en.wikipedia.org/wiki/Christofides_algorithm
http://en.wikipedia.org/wiki/Traveling_salesman_problem#Metric_TSP
28. Schieber-Vishkin算法 - 最小公共祖先
http://en.wikipedia.org/wiki/Lowest_common_ancestor
29. Knuth's Algorithm X
http://en.wikipedia.org/wiki/Knuth's_Algorithm_X
Dancing Links: http://arxiv.org/abs/cs/0011047
30. Marcus Hutter's "The Fastest and Shortest Algorithm for All Well-Defined Problems"
http://www.hutter1.net/ai/pfastprg.pdf
http://arxiv.org/ps/cs/0102018
31. Expander codes (膨胀码)
Tanner (1981) http://www.ldpc-codes.com/papers/rlcc.pdf
Sipser and Spielman(1994) http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=365734
"Linear-time encodable and decodable error-correcting codes" Spielman (1995) http://dl.acm.org/citation.cfm?doid=225058.225165
"Randomness conductors and constant-degree lossless expanders" (2002) http://dl.acm.org/citation.cfm?doid=509907.510003
32. 归并排序
http://en.wikipedia.org/wiki/Merge_sort
33. Berlekamp-Massey's algorithm - 构造最短线性反馈移动寄存器
http://en.wikipedia.org/wiki/Berlekamp%E2%80%93Massey_algorithm
34. Universal Hash/Pairwise indepent hash functions
http://en.wikipedia.org/wiki/Universal_hashing
"Universal Classes of Hash Functions" http://www.cs.princeton.edu/courses/archive/fall09/cos521/Handouts/universalclasses.pdf
"Introduction to pairwise independent hashing" http://www.wisdom.weizmann.ac.il/~oded/CC/X/hash.pdf
35. 平面图最近点问题线性算法
“Geometric Approximation Algorithms” http://sarielhp.org/teach/notes/aprx/lec/01_min_disk.pdf
36. Timothy Chan's O(N*logN)平面凸包算法
http://www.cs.uwaterloo.ca/~tmchan/conv23d.ps.gz
37. Goemans-williamson algorithm - 最大割近似算法
http://en.wikipedia.org/wiki/Semidefinite_programming#Example_3_.28Goemans-Williamson_MAX_CUT_approximation_algorithm.29
38. Binary Decision Diagrams
http://en.wikipedia.org/wiki/Binary_decision_diagram
http://www.cs.unb.ca/~gdueck/courses/cs4835/bdd97.pdf
Knuth TAOCP Vol4, Fas 1, Page 202-280
39. Edge-flipping Algorithm - 构造2D Delaunay Triangulation
http://en.wikipedia.org/wiki/Delaunay_triangulation#Flip_algorithms
40. Ford-Fulkerson Algirithm - 最大流算法
http://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm
41. Euclidean TSP近似算法
"Polynomial-time Approximation Schemes for Euclidean TSP and other Geometric Problems" Sanjeev Arora
42. Steepest descent 最速下降法
http://en.wikipedia.org/wiki/Method_of_steepest_descent
http://mathworld.wolfram.com/MethodofSteepestDescent.html
http://sces.phys.utk.edu/~moreo/mm08/XuWangP571.pdf
43. Kosaraju's Algorithm - 寻找有向图强连通分支
http://en.wikipedia.org/wiki/Kosaraju%27s_algorithm
44. Persistant data structure (持久化数据结构)
这里的持久化,表示数据结构的更新历史被保存下来;而不同于一般软件开发中的持久化。
http://en.wikipedia.org/wiki/Persistent_data_structure
Persistant Array: “Fully Persistent Arrays for Efficient Incremental Updates and Voluminous Reads (1992)"
45. Hash Consing
http://en.wikipedia.org/wiki/Hash_consing
46. 全组合/全排列生成算法
http://en.wikipedia.org/wiki/Combination
http://en.wikipedia.org/wiki/Permutation
47. Random Projection - 降维
“Random projection in Dim reduction: applications to image and text data”: http://users.ics.aalto.fi/ella/publications/randproj_kdd.pdf
http://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma
48. Schöning's random-walk algorithm for 3-SAT
http://theory.stanford.edu/~trevisan/cs174/notes/note9.ps
49. LLL Algorithm (Lenstra-Lenstra-Lovász) Lattice Basis Reduction
http://en.wikipedia.org/wiki/Lenstra%E2%80%93Lenstra%E2%80%93Lov%C3%A1sz_lattice_basis_reduction_algorithm
50. Linear Majority Voting Algorithm
MJRTY - A Fast Majority Vote Algorithm, with R.S. Boyer. In R.S. Boyer (ed.)