一些有意思的算法代码

Keith Schwarz是一个斯坦福大学计算机科学系的讲师。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构,http://www.keithschwarz.com/interesting/, 目前这个网页上有88个(见下面的列表),但这位大哥要干135个,你可以看看他的To-Do List

从这个列表上,我们可以看到,他从去年7月份就在自己实现这些东西了,我把他实现的这些算法转过来,

  • 另一方面我希望这个事可以影响到一些正在学习编程的人。看看别人是怎么学习编程的,希望对你有借鉴作用。

插播福利

1.近期整理了20G资源,包含产品/运营/测试/程序员/市场等,互联网从业者【工作必备干货技巧、行业专业书籍、面试真题宝典等】,获取方式:

  • 微信扫码关注公众号“非典型互联网”,转发文章到朋友圈,截图发至公众号后台,即可获取干货资源链接;

2.互联网人交流群:

  • 关注公众号“非典型互联网”,在公众号后台回复“入群”,人脉共享,一起交流;


NameLinkDate AddedLanguageDescription
Binomial Heap(link)7‑24‑2010C++An implementation of a binomial heap data structure for use as a priority queue.
Bounded Priority Queue(link)7‑24‑2010C++An implementation of a priority queue with a fixed upper limit to its size..
Matrix(link)7‑24‑2010C++A collection of classes for manipulating matrices.
VList(link)8‑16‑2010JavaAn implementation of the
List
abstraction backed by a VList.
Function Wrapper(link)8‑16‑2010C++A C++ wrapper class around unary functions.
String(link)8‑17‑2010C++An implementation of a string abstraction that uses the small string optimization.

nstream(link)8‑31‑2010C++An stream class that sends and receives data over a network.
Snake(link)8‑31‑2010C++An implementation of the gameSnakewith a rudimentary AI.
Mergesort(link)9‑14‑2010C++An implementation of the mergesort algorithm.
Next Permutation(link)10‑6‑2010C++An implementation of thenext_permutationSTL algorithm.
Interval Heap(link)10‑17‑2010JavaAn implementation of a double-ended priority queue using an interval heap.
Linear-Time Selection(link)10‑18‑2010C++A deterministic, linear-time selection algorithm using the median-of-medians algorithm.
Heapsort(link)10‑18‑2010C++An implementation of the heapsort algorithm.
Union-Find(link)10‑19‑2010JavaAn implementation of a disjoint-set data structure using a disjoint set forest.
Radix Sort(link)10‑19‑2010C++An implementation of the radix sort algorithm.
Rational(link)10‑23‑2010C++A data structure representing a rational number.
DPLL(link)10‑23‑2010HaskellAn implementation of the DPLL algorithm for solving CNF-SAT.
Smoothsort(link)10‑27‑2010C++An implementation of the smoothsort algorithm, an adaptive heapsort variant.
Extendible Array(link)10‑28‑2010Javadynamic array class with O(1) worst-case runtime lookup and append.
In-Place Merge(link)10‑29‑2010C++An implementation of a merge algorithm that runs in-place.
Random Shuffle(link)10‑29‑2010C++An algorithm for generating a random permutation of a set of elements.
Random Sample(link)10‑29‑2010C++An O(n) time, O(1) space algorithm for randomly choosing k elements out of a stream with uniform probability.
Natural Mergesort(link)10‑30‑2010C++An implementation of natural mergesort, an adaptive variant of mergesort.
Interpolation Search(link)10‑31‑2010C++An implementation of the interpolation search algorithm.
Introsort(link)10‑31‑2010C++An implementation of the introsort algorithm, a fast hybrid of quicksortheapsort, andinsertion sort.
Hashed Array Tree(link)11‑3‑2010JavaAn implementation of a dynamic array backed by a hashed array tree.
Recurrence Solver(link)11‑13‑2010C++A fast algorithm for generating terms of a sequence defined by a linear recurrence relation.
Fibonacci Heap(link)11‑15‑2010JavaAn implementation of a priority queue backed by a Fibonacci heap.
Dijkstra’s Algorithm(link)11‑16‑2010JavaAn implementation of Dijkstra’s algorithm for single-source shortest paths.
Prim’s Algorithm(link)11‑17‑2010JavaAn implementation of Prim’s algorithm for computing minimum spanning trees.
Kruskal’s Algorithm(link)11‑17‑2010JavaAn implementation of Kruskal’s algorithm for computing minimum spanning trees.
Majority Element(link)11‑17‑2010C++A fast, linear-time algorithm for finding the majority element of a data set.
Haar Transform(link)11‑17‑2010C++A set of functions to decompose a sequence of values into a sum of Haar wavelets.
Argmax(link)11‑19‑2010C++A pair of functions to compute the arg min or max of a function on some range.
Derivative(link)11‑19‑2010C++function object that approximates the derivative of a function.
Levenshtein Distance(link)11‑19‑2010C++An algorithm for computing the Levenshtein distance between two sequences.
Skiplist(link)11‑20‑2010C++An implementation of a skip list, a randomized data structure for maintaining a sorted collection.
van Emde Boas Tree(link)11‑26‑2010C++An implementation of a sorted associative array backed by a van Emde Boas tree.
Cuckoo HashMap(link)11‑27‑2010JavaAn implementation of a hash table using cuckoo hashing.
Needleman-Wunsch Algorithm(link)11‑28‑2010C++An implementation of the Needleman-Wunsch algorithm for optimal string alignment.
Treap(link)11‑28‑2010C++An implementation of a sorted associative array backed by a treap.
Floyd-Warshall Algorithm(link)12‑10‑2010JavaAn implementation of the Floyd-Warshall algorithm for all-pairs shortest paths in a graph.
Power Iteration(link)12‑10‑2010C++An implementation of the power iteration algorithm for finding dominant eigenvectors.
Edmonds’s Matching Algorithm(link)12‑15‑2010JavaAn implementation of Edmonds’s matching algorithm for finding maximum matchings in undirected graphs.
Kosaraju’s Algorithm(link)12‑15‑2010JavaAn implementation of Kosaraju’s algorithm algorithm for finding strongly connected components of a directed graph.
2-SAT(link)12‑15‑2010JavaA linear-time algorithm for solving 2-SAT.
Bellman-Ford Algorithm(link)12‑17‑2010JavaAn implementation of the Bellman-Ford algorithm for single-source shortest paths.
Topological Sort(link)12‑17‑2010JavaAn algorithm for computing a topological sort of a directed acyclic graph.
Graham Scan(link)12‑19‑2010C++An implementation of the Graham scan for finding convex hulls in 2D space.
Bipartite Testing(link)12‑19‑2010JavaA linear-time algorithm for checking whether a directed graph is bipartite.
Johnson’s Algorithm(link)12‑19‑2010JavaAn implementation of Johnson’s algorithm for all-pairs shortest paths.
Strassen Algorithm(link)12‑20‑2010C++An implementation of the Strassen algorithm for fast matrix multiplication.
Cartesian Tree Sort(link)12‑21‑2010C++An implementation of Cartesian tree sort, an adaptive, out-of-place heapsort variant.
Ford-Fulkerson Algorithm(link)12‑21‑2010JavaAn implementation of the Ford-Fulkerson maximum-flow algorithm.
Scaling Ford-Fulkerson(link)12‑22‑2010JavaAn modification of the Ford-Fulkerson maximum-flow algorithm that uses scaling to achieve polynomial time..
Splay Tree(link)12‑27‑2010C++An implementation of a sorted associative array backed by a splay tree.
Ternary Search Tree(link)12‑28‑2010C++An implementation of a sorted set of strings backed by a ternary search tree.
Ring Buffer(link)12‑30‑2010JavaAn implementation of a FIFO queue using a ring buffer.
AVL Tree(link)12‑30‑2010C++A sorted associative container backed by an AVL tree.
Rabin-Karp Algorithm(link)1‑1‑2011C++An implementation of the Rabin-Karp algorithm for string matching.
RPN Evaluator(link)1‑18‑2011C++ / strainA library to tokenize and evaluate simple arithmetic expressions in reverse Polish notation.
Shunting-Yard Algorithm(link)1‑18‑2011C++ / strainAn implementation of Dijkstra’s shunting-yard algorithm for converting infix expressions to reverse-Polish notation.
Skew Binomial Heap(link)1‑20‑2011C++An implementation of a priority queue backed by a skew binomial heap.
2/3 Heap(link)3‑1‑2011C++An implementation of a priority queue whose branching factor alternates at different levels to maximize performance.
Zeckendorf Logarithm(link)3‑10‑2011C++An algorithm based on Zeckendorf representations that efficiently computes logarithms.
Factoradic Permutations(link)3‑17‑2011C++A set of algorithms for generating permutations using the factoradic number system.
Binary Cyclic Subsets(link)3‑20‑2011C++A set of algorithms for generating subsets in lexicographical order using binary numbers and cyclic shifts.
Fibonacci Iterator(link)3‑22‑2011C++An STL-style iterator for iterating over the Fibonacci numbers.
Fibonacci Search(link)3‑22‑2011C++An implementation of the Fibonacci search algorithm.
Euclid’s Algorithm(link)4‑18‑2011HaskellAn implementation of Euclid’s algorithm and applications to continued fractions and the extended Euclidean algorithm.
Find Duplicate(link)4‑18‑2011PythonAn algorithm to find a repeated element in an array using Floyd’s cycle-finding algorithm.
Permutation Generator(link)4‑19‑2011Pythongenerator for producing all permutations of a list of elements.
Matrix Find(link)4‑19‑2011PythonA solution to the classic interview question of searching a sorted matrix for a particular value.
Binary GCD(link)4‑23‑2011SchemeAn implementation of the binary GCD algorithm for computing greatest common divisors of nonnegative integers.
Knuth-Morris-Pratt Algorithm(link)5‑3‑2011PythonAn implementation of the Knuth-Morris-Pratt algorithm for fast string matching.
Kadane’s Algorithm(link)5‑7‑2011C++An implementation of Kadane’s algorithm for solving the maximum-weight subarray problem.
Karatsuba’s Algorithm(link)8‑15‑2011PythonAn implementation of Karatsuba’s algorithm for fast integer multiplication.
Min-Stack(link)8‑15‑2011C++An implementation of a LIFO stack that supports O(1) push, pop, and find-minimum.
Random Bag(link)8‑15‑2011PythonA data structure that supports insertion and removal of a uniformly-random element.
Min-Queue(link)8‑15‑2011C++An implementation of a FIFO queue that supports O(1) push, pop, and find-minimum.
Lights-Out Solver(link)8‑29‑2011C++A solver for the game Lights Out using Gaussian elimination over GF(2).
Maximum Single-Sell Profit(link)11‑9‑2011PythonFour algorithms for the maximum single-sell profit problem, each showing off a different algorithmic technique.
Generalized Kadane’s Algorithm(link)11‑10‑2011C++A generalization of Kadane’s algorithm for solving the maximum subarray problem subject to a length restriction.
Longest Range(link)11‑19‑2011JavaAn algorithm for solving the longest contiguous range problem.
Egyptian Fractions(link)11‑20‑2011PythonAn implementation of the greedy algorithm for finding Egyptian fractions.
LL(1) Parser Generator(link)11‑21‑2011JavaAn LL(1) parser generator.
LR(0) Parser Generator(link)11‑23‑2011JavaAn LR(0) parser generator.
Word Ladders(link)11‑27‑2011JavaScriptA program for finding word ladders between two words.

(全文完)

作者:陈皓,博客地址:https://coolshell.cn/articles/18190.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值