随笔分类 -  Algorithm

摘要:struct bitmap{ unsigned int len; unsigned char* buf;};struct bitmap* creat_bitmap(unsigned int len){ struct bitmap *bm; if (len buf = ... 阅读全文
posted @ 2014-08-15 11:27 Homura 阅读(339) 评论(0) 推荐(0)
摘要:一个典型的快速排序如下QUICKSORT(A, p, r)if (p < r) then q <- PARTITION(A, p, r) QUICKSORT(A, p, q-1) QUICKSORT(A, q+1, r)显然在最底层一个函数返回之前,栈的深度为length(A).其实其中一个递归可以去掉。QUICKSORT2(A, p, r)while (p < r) then q <- random(p, r) QUICKSORT2(A, p, q-1) p = q+1在最后一个函数返回之前,栈的深度为lg(length(A)).简单分析:我们把每一次函... 阅读全文
posted @ 2013-10-25 00:06 Homura 阅读(1615) 评论(0) 推荐(0)
摘要:通过比较元素的大小的排序算法的运行时间下界为NlgN(可以用决策树来证明)但是满足某些条件的序列可以达到线性。假设序列A有N个元素,这N个元素都是大于1小于K的整数。伪代码如下,A[N], B[K], C[N],C[N]为排序结果for i 2N.仔细分析一下,这算法如此高效的原因在于每个元素的相对位置不会变化(在a右边的数不会跑到a左边)。而在比较算法里面就保证不了这种情形。我们称之为算法的稳定性。 阅读全文
posted @ 2013-10-22 23:56 Homura 阅读(206) 评论(0) 推荐(0)
摘要:求一个字符串S的全排列.假设字符串的长度为N。问题可以分解为确定了第一个字符,求后面N-1个字符的全排列递归来解决。递归的关键在于第一个字符有N种选择。递归表达式为T(N) = N * T(N-1), T(1) =1void swap(char *a, char *b){ char c; if (a == b) return; c = *a; *a = *b; *b = c;}void func(char *s){ int i, len = strlen(s); ... 阅读全文
posted @ 2013-10-16 21:09 Homura 阅读(140) 评论(0) 推荐(0)