算法&数据结构
文章平均质量分 65
猫已经找不回了
猫已经找不回了
展开
-
用二叉树判断逆波兰表达式
逆波兰表达式又叫做后缀表达式。逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+* 一般对逆波兰表达式的计算都是通过入栈和出栈实现,网上例子蛮多的。 我来分析一下用2叉树来计算逆波兰表达式(后缀表达式); X=(A+B)*(C-D/E)这样一个表达式,求它的后缀表达式该怎样原创 2009-04-28 17:09:00 · 5261 阅读 · 0 评论 -
大数运算——加法,减法,乘法
<br />尝试实现了下大数运算的代码。<br />原理就是用int型数组模拟一个大数的每个位。<br />数组的[0]对应的大数的个位。<br /> <br /> <br />具体代码如下,主要考虑大于10的元素要进位,负数要借位。<br /> <br />#include <iostream>#include <algorithm>#include <stdio.h>#include <string.h>using namespace std;#define MAX_DIGI原创 2011-04-08 20:04:00 · 13456 阅读 · 4 评论 -
常见的链表题目
1.单链表的反序//逆转链表,并返回逆转后的头节点node* reverse(node *head){ node *cur = head; node *pre = NULL; node *tmp; while(cur->next) { tmp = pre; pre = cur; cur = cur->next; pre->next = tmp;原创 2010-08-25 11:46:00 · 11416 阅读 · 11 评论 -
不用栈实现二叉树非递归中序遍历
偶尔看到这样一个问题: 有个二叉树,每个节点除了左右指针外,还有一个指向父节点的指针。要求不用递归,中序遍历这棵树。另要求空间复杂度是O(1). 空间复杂度为O(1),摆明就是不让用堆栈模拟递归,所以想了想思路,也请教过好几个朋友,大家都基本想法都差不多,由于有指向父节点的指针,必定可以回溯,从而可以不需要堆栈来做记录.但是实现起来,却发现很多细节需要完善,比如遍历的终止条件,原创 2009-12-24 14:27:00 · 10245 阅读 · 3 评论 -
sunday算法研究——超越kmp的字符串匹配
第一次听到Sunday算法,是大饼饼说的。在他图文并茂的解释中,我发现这个算法果然是一个又容易理解,效率又强过kmp和BM的算法。于是试着写了一个,果真是好东东,分享一下。转一些概念先:Sunday算法是Daniel M.Sunday于1990年提出的一种比BM算法搜索速度更快的算法。其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹原创 2009-10-26 15:13:00 · 12059 阅读 · 16 评论 -
联机算法求最大子序列和
一个无序的数组,找出相邻的任意个元素,使得其和最大。int max_subseq_sum(int *a,int N){ int i,sum=0,max=0; for(i=0;i<N;++i) { sum+=a[i]; if(sum<0) sum=0; else if(sum>max) max=sum; } return max;}原创 2009-10-15 19:37:00 · 4960 阅读 · 3 评论 -
LCS_最大公共子串查找算法解析
最大公共子串算法可用动态规划来解。网上有篇是用一个一维数组(string,本质是一维)来记录匹配信息。效果还能让人满意,贴出代码与个人理解。 string lcs_search(string str1, string str2){ if (str1.length() < str2.length()) //保证str1为母串(较长的哪个串)原创 2009-10-13 17:31:00 · 4351 阅读 · 1 评论 -
DH应用-求余算法改进
DH算法里需要求(n^x)%p;其中p为大素数,n跟x都是大数。 那怎样求(n^x)%p呢?我有一篇文章里讲过思路,今天找出以前的代码,贴出来。 __int64 remod(__int64 x, __int64 y, __int64 N) //可以求出(x^y)%N求余{ statis++; __int64 tmp = 0; if (y==1) ret原创 2009-10-14 19:46:00 · 2136 阅读 · 0 评论 -
内存池&经典的内存池技术
网上有一关于内存池的文章,拿来分享一下:内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。经典的内存池(MemPool)技术,是一种用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释转载 2009-08-27 17:28:00 · 2912 阅读 · 2 评论 -
一道爱立信改自腾讯笔试题
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。 记得腾讯有过这样一道题:1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句跟此处有点类似。 网上貌似答案蛮多的,这里随便给一个自己的想法。 void main(){ int a=6,b=5; int d[2]={b,a原创 2009-06-13 16:05:00 · 6277 阅读 · 12 评论 -
排序系列- 堆排序
1、 堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点转载 2009-05-05 17:15:00 · 3509 阅读 · 0 评论 -
[数据结构]哈夫曼树、哈夫曼编码(转)
哈夫曼树又称最优树(二叉树),是一类带权路径最短的树。构造这种树的算法最早是由哈夫曼(Huffman)1952年提出,这种树在信息检索中很有用。 结点之间的路径长度:从一个结点到另一个结点之间的分支数目。树的路径长度:从树的根到树中每一个结点的路径长度之和。结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和,记转载 2009-05-05 15:41:00 · 23578 阅读 · 17 评论 -
一道关于字符串逆序的笔试题
<br />某同学在网上留的笔试题如下:<br />函数实现将网址进行如下操作<br />www.google.com转成com.google.www 及mail.netease.com转成com.netease.mail<br /><br />不允许用STL,空间为0(1)<br /><br />思路如下:<br />1.先对每个被'.'隔开的单词都逆序一次。<br />2.对整个串再逆序一次。<br /> <br /> <br />//对ptr从iStart开始iNum字符,进行逆转void rev原创 2011-04-27 21:04:00 · 2771 阅读 · 1 评论