算法与数据结构
文章平均质量分 59
unicode1985
温和的激进派
展开
-
字符串模式匹配之:Sunday算法
介绍我就不说了,这里给出c代码供参考#include "stdio.h"#include char *qsearch(const char *text, int n, const char *patt, int m){ // get the length of the text and the pattern, if necessary if (n n = strlen(text);原创 2007-05-30 13:35:00 · 2065 阅读 · 2 评论 -
数据结构之:treap 简介(一)
treap是二叉搜索树的一个改进版,通过在二叉搜索树(BST)中增添优先权信息,使得BST具备堆的性质:树根节点的优先权最大(或最小)。简言之,treap = tree + heap解释完了treap是什么,我们再说一下为什么这么做,其实这个应该先讲,否则会让人迷惑。这么做的原因是防止BST的退化,在向BST中添加节点时,由于输入数据的随机性,极端情况下可能会导致生成的BST变成一个链表树了,这原创 2008-04-02 13:42:00 · 2273 阅读 · 1 评论 -
数据结构之:treap 简介(二)
上一篇主要概述treap,并给出玩具版的代码。这篇讲一讲treap树的插入、搜索、删除、旋转要考虑的问题。先讲最需要注意的部分:结点旋转。熟悉AVL树的会比较了解旋转,结点旋转是为了平衡树结构,使树更均匀。那么treap树结点的旋转相对AVL简单,只有两种:左旋和右旋。左旋就是:当根结点root的优先权低于root的右子结点时,需要将右子结点转到root位置,相应的root会变原创 2008-04-02 15:06:00 · 820 阅读 · 0 评论 -
编程系列之:删数
删数问题:键盘输入一个高精度正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。贪心法:每次找递减序列,删掉序列的头数字。代码:/*** * [email protected] * 20080402 * * given 2 integers N and S, delete S numbers of原创 2008-04-03 16:49:00 · 580 阅读 · 0 评论 -
编程系列之:最长回文子串问题
问题:给定一个字符串,找出其中的最长回文子串长度。例如:abccbabcddcba,最长的为abcddcba,长度为8解决:用栈,遇到与栈顶不同的字符,压栈;否则,弹栈并比较下一个字符与栈顶的是否相同,相同继续弹栈;记录弹了多少个,乘二,更新最长回文子串长度max;/*** * [email protected] * 20080404 * * 找到给定字符串中最长的回文串长度。原创 2008-04-04 09:22:00 · 5472 阅读 · 5 评论 -
编程系列之:矩阵打印
题目描述:打印如下形式的矩阵;n=5: 1 2 9 10 25 4 3 8 11 24 5 6 7 12 2316 15 14 13 2217 18 19 20 21n=6: 1 2 9 10 25 26 4 3 8 11 24 27 5 6 7 12 23 2816 15 14 13 22 29 17 18 19 20 21 3036 35 34 33 32 31观原创 2008-04-21 23:51:00 · 2851 阅读 · 1 评论 -
编程系列之:字符串逆序
想要将字符串:”This is a book!“变成 ”book! a is This“ 算法:遍历字符串,遇到空格就将单词反转,最后将整个字符串反转;O(n)时间O(1)空间 代码如下: #include #include #include #include "words_reverse.h"using namespace std;inline void swap(原创 2010-03-14 20:33:00 · 3041 阅读 · 0 评论