1 import random 2 3 def partition(A, lo, hi): 4 pivot_index = random.randint(lo, hi) 5 pivot = A[pivot_index] 6 A[pivot_index], A[hi] = ...
分类:
编程语言 时间:
2015-02-26 14:51:41
阅读次数:
183
看了算法导论的影印版的哈希表时,开始还不太明白, 想了下后觉得似乎哈希表就是数组和链表的组合, 于是根据这个思路实现了一个最简易的哈希表。这个其实我还是不太满意, 可能在以后会更新, 因为我觉得不满足 DRY 原则。class HashTable{private: const size_t ...
分类:
其他好文 时间:
2015-02-25 23:32:18
阅读次数:
285
An Python implementation of heap-sortbased on the detailed algorithm description in Introduction to Algorithms Third Editionimport randomdef max_heap....
分类:
编程语言 时间:
2015-02-25 22:19:46
阅读次数:
185
桶排序是一种稳定的排序方法,也是一种外排序。
桶排序的时间复杂度:最坏情况运行时间:当分布不均匀时,全部元素都分到一个桶中,则O(n^2),当然[算法导论8.4-2]也可以将插入排序换成堆排序、快速排序等,这样最坏情况就是O(nlgn)。最好情况运行时间:O(n)。
也就说,前面介绍的排序算法要么是O(n^2),要么是O(nlogn),只有桶排序是可能实现O(n)排序的...
分类:
编程语言 时间:
2015-02-25 18:44:00
阅读次数:
184
公开课地址:http://open.163.com/movie/2010/12/3/A/M6UTT5U0I_M6V2TGI3A.html全域哈希诞生:哈希的根本缺陷:对于任意哈希函数而言,都存在一个不好的健集,使得所有的健都会哈希到同一个槽里去,那么如何解决这种情况呢?如何防止对某个键集永远有较差的...
分类:
编程语言 时间:
2015-02-25 16:47:54
阅读次数:
243
带参宏定义和inline修饰的内联函数都是在编译时,用函数体替换掉宏调用或函数调用。这样用的好处是减少调用函数所花费的时间。例如:算法导论在讲到堆排序时说的,好的堆排序实现一般是把Left(i),Right(i),Parent(i)的实现通过宏定义或内联函数来实现,这就是因为当我们对一组数据使用堆排...
分类:
其他好文 时间:
2015-02-25 12:53:40
阅读次数:
114
之前已经比较熟悉快排的基本思想了,其实现的方式也有很多种。下面我们罗列一些常见的实现方式:
版本一:算法导论上的单向扫描,选取最后一个元素作为主元
#include
using namespace std;
int partition(int data[], int low, int high)
{
int pivot = data[high]; // let the ...
分类:
编程语言 时间:
2015-02-24 18:46:40
阅读次数:
185
算法导论第2.3-7的习题中要求给出一个运行时间为O(nlgn)的算法,这个算法的功能是能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在两个其和等于x的元素。
方法一:都知道在一个有序的序列中使用二分查找的时间复杂度是O(lgn)。首先排序,那么我们可以枚举集合S中的每一个元素,然后使用二分查找算法查找x-y(y是S中的一个元素),那么这个算法的时间复杂度是O(nlgn)。...
分类:
其他好文 时间:
2015-02-21 18:52:24
阅读次数:
243
红黑树的性质: 1.每个结点要么是红色要么是黑色的。 2.根结点是黑色的。 3.所有叶结点(nil)是黑色的。 4.每个红色结点的两个孩子都是黑色的。 5.每个结点到其后代叶结点的简单路径上均包含相同数目的黑色结点。INSERT操作按二叉搜索树的方法插入新结点。INSERT-FIXUP(三...
分类:
编程语言 时间:
2015-02-21 10:50:59
阅读次数:
156