
数据结构&算法
帐前卒
有道云笔记Server端码农。勤于专研算法架构等诡异的计算机知识。
展开
-
如何学习数据结构--致刚上大二的学弟学妹
数据结构其实是从各种应用中抽象出来的东西。刚开始学习的时候可能感觉有些费力。而且不知道学了有什么用处。这对于大二的学生来说,是很正常的事。而且大二刚学会c与c++,对模版,指针的编程可能还有些困难。但是只要从简单的做起,从最基本的线性表开始编程,也还是会有突破的。但要切忌:绝对不能比这书本敲代码,即使书本已经帮你实现了。因为那样写出来的代码不是自己的。要学会自己思考着写代码,写自己的代码。原创 2006-11-10 15:50:00 · 5083 阅读 · 3 评论 -
GeneralTree 一般树形结构类
这个类用于一般树形,每个节点可以有多个分支,且数目不定。可以看做是二叉树的变形形式。一个节点除了父指针外还有左右两个指针。左指针为孩子节点的起始指针,右指针为同父节点的兄弟节点的指针例如:A的左指针为B,右指针为C,C的左指针为E,右指针为D则,A,C,D为同兄弟节点。B为A的子节点,E为C的子节点。这里使用到了GeneralTreeNode类这个树没有delete操作原创 2009-02-03 13:54:00 · 2983 阅读 · 0 评论 -
链表类List
这个类是为了给GeneralTree提供Queue队列操作才创建的。因为GeneralTree使用层次遍历的时候,必须要使用这样一个队列。当然如果你没有这样一个队列,但是你在每个节点那里设置了计数器,那么你还是可以完成一个层次遍历操作。这里为了保持GeneralTreeNode的最简单性,所以没有添加计数器属性。下面是List类的具体代码:/** create by chic原创 2009-02-03 14:28:00 · 1559 阅读 · 0 评论 -
GeneralTreeNode 一般树形结构节点类
写这个类是配合GeneralTree这个类的。这个类使用TreeNode基类继承而来。这里有一点要说明的。为了编程的方便,这里TreeNode中的成员属性均设置为Public当然,如果有需求一遍写为protected。当然我这里是为了自娱自乐..所以没有在意太多。TreeNode头文件详见http://blog.youkuaiyun.com/cctt_1/archive/2008/08/19/2原创 2009-02-03 09:58:00 · 2094 阅读 · 0 评论 -
AI 决策树ID3 代码(c++)
源代码工程文件(vs2005)http://d.download.youkuaiyun.com/down/1018461/cctt_1过去在网上找了段代码,发现写的代码要改些地方,而且也想顺便练习下自己的c++编码。首先我要建立一个真正的树形结构。于是使用了自己过去的GeneralTree.h(当然这里还是改动些GeneralTree的代码例如增添了些函数,另外把有些私有函数变成了公有函数)。训练原创 2009-02-03 17:13:00 · 4798 阅读 · 4 评论 -
linear线性级排序算法
线性级排序算法需求:需要找到前m个大数,这m个数必须有序。现在有n个数(n>>m)。可以使用大空间但是空间远小于n。这里的含义是连同这n个数都不要占用n的空间。因为数据量太大了。N个数是一个一个生成的。思考:1. 这m个数有序,这当然不是一个排序问题,或者是一个部分排序问题。已知的排序是冒泡,插入,选择,归并,快速和基数排序。2. 冒泡效率低。选择排序的要求原创 2008-12-07 10:41:00 · 1332 阅读 · 0 评论 -
SVM类库研究(牛mm精简版)
俺的SVM,牛mm说太口语化,另外加的都是句号,说我语文没有学好。于是她给我改写了一下。我发现我真的很喜欢句号,句号表示一句话终结了。很显然,我喜欢把每件事情都终结了。不多说了,因为牛mm可能不希望别人知道她真名,所以我只好先用牛mm代替了。因为她很牛,而且又是mm,所以就叫牛mm。原文:http://blog.youkuaiyun.com/cctt_1/archive/2008/11/17/33211原创 2008-12-10 08:52:00 · 2152 阅读 · 0 评论 -
数据挖掘是科学还是宗教?
这世间万事万物都是有联系的。一个因素诱使另一个因素的发生。美洲的蝴蝶或许会引起飓风,USA的经济让全世界人民买单..或许这就是规律。近来上了高级数据挖掘课。想想从众多属性因素中找到关联的规律,确实不是一件简单的事情。 课上老师说:超市中发现某天尿布和啤酒大多是同时卖出的。然后老师做的解释说,估计全家人以后几天想在家庆祝不想外出。然后超市就可以根据这个规律来制定产品的价格并进行促销活动原创 2009-02-26 12:01:00 · 1191 阅读 · 2 评论 -
KMeans 算法
KMeans最主要是思想是1.播撒K个标识点,K是你要分成几类。2.网络中所有点对这K个点计算距离,并归入最近的一个标识点中。这样就得到K个类3.重新计算这K个类的中心距离。4.是否要更新K个类的中心距离,是否迭代次数为0,如果要更新标识点的位置,并且迭代次数不为0,更新标识点,并跳转回2. 下面是为FPT 写的KMeans算法。这个FPT分裂时只要分成两类,所以就是K=2原创 2009-04-23 17:52:00 · 1603 阅读 · 0 评论 -
HashTable和HashMap的区别
转至http://blog.youkuaiyun.com/treeroot/ HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。 1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动转载 2009-08-14 19:31:00 · 1032 阅读 · 0 评论 -
hash函数
转自 http://baike.baidu.com/view/604021.html Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输转载 2009-08-14 19:38:00 · 1138 阅读 · 0 评论 -
python 中文分词——FMM 算法
FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n-1个...然后继续下去。假如n个词在词典中出现,那么从n+1位置继续找下去,知道句子结束。import redef PreProcess(sentence,edcode="utf-8"): sentence = sentence.decode(edcode)原创 2009-06-23 12:04:00 · 7637 阅读 · 2 评论 -
viterbi算法 python版
牛mm细心给我讲了一个小时,终于明白它的含义,然后花了一两节分布式数据库的课实现了。当时牛mm还说不可能这么快实现,结果不可能事还是发生了。发现python果真非常好用。不明白此算法可以看这篇blog http://blog.youkuaiyun.com/NirvanaFeng/archive/2009/05/12/4171799.aspx初始化方法:def InitDicForViterbi(n原创 2009-06-23 10:59:00 · 4143 阅读 · 0 评论 -
WebSQL查询www
本来想自己写个语言来查找web中的某些类似的信息。比如价格,程序啥的。因为一般这样的信息都会在某些类似的地方重复出现。开始使用查找language crawl等关键字,结果啥都没有找到。后来想web可以类比为网状型数据库,而网站内的页面中的标签可以类比为层次型数据库。然后准备看看有没有层次型数据库的查询语言,准备改进为web搜索的语言。结果搜到了WebQL,看了他的论文后,又找到了webSQL这东原创 2009-10-10 16:24:00 · 1152 阅读 · 0 评论 -
模2除法
这或许是一个简单的问题,但是我早就忘记咋解了。关于一个二进制数1111000 除以1101,模2除法的商为1011,余数为111.这个结果不同于十进制除法。所以特记下。具体步骤如下:#第一步111100011010010000 ----余数,商为1,只要第一位非0商就是1#第二步,每步移一位,当起始位为0时,除以0;为1时除以除数。01000000000100原创 2009-11-13 14:09:00 · 6735 阅读 · 3 评论 -
yacc与lex入门
转自Ashish Bansal (abansal@ieee.org), 软件工程师, Sapient 公司 LexLex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 Lex 接收到文件或文转载 2010-03-18 11:20:00 · 1715 阅读 · 1 评论 -
广义表的定义
转自http://blog.youkuaiyun.com/lpioneer/archive/2008/01/16/2046940.aspx广义表(Lists,又称列表)是线性表的推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。1、广义表定义 广义表是n(n≥0)个元素a1,a2,…,ai,…,an的有限序列。 其中: ①ai--或者是原子或转载 2010-04-02 16:07:00 · 1510 阅读 · 0 评论 -
博弈问题及SG函数
<br />转载自http://blog.youkuaiyun.com/logic_nut/archive/2009/10/22/4711489.aspx<br />推荐看看:http://www.math.ucla.edu/~tom/<br />学习理论在这里:http://www.math.ucla.edu/~tom/Game_Theory/Contents.html<br />博弈问题<br />若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这转载 2010-06-29 09:11:00 · 1172 阅读 · 2 评论 -
关于容器
有时我想知道怎样设计容器类才是合理的。是让用户自己new一个新的对象在放入容器类,还是我隐式的new一个新的对象?这就带来一些问题。如果我隐式为新的对象建立容器类,那么很有可能我以后不好释放。因为对于object来说,是不能使用delete。并且每次都new也带来不小的时间损耗。最简单的方式是不为用户new出新的对象,不delete容器类中的对象。那么假如粗心的用户new出来新的指原创 2009-01-21 16:35:00 · 844 阅读 · 0 评论 -
选羊选车问题
有三个门,两个羊一个车。嘉宾选择一个门后,主持人打开另外两个门中的一个,门里是羊。嘉宾改选或者不改选。门后有车就中大奖。否则什么都没有。 记得当年做这个题目的时候就与小李子和疯子争论的不休。当时时至今日仍然不能完全确定这是个概率问题。其实这个不完全是概率问题因为概率中只是考虑了出现结果的可能性。但是这个问题却考虑出现结果的好坏。换而言之,就是在这个事件中。它是一个不可重复的原创 2009-01-20 18:40:00 · 1798 阅读 · 0 评论 -
SVM 类库研究历程
开始接到SVM的研究任务,心里其实感觉svm是够难的。因为我大学在人脸识别项目中曾经研究过一段时间。但是因为不知道为何matlab中svm类库有点小问题,就被迫终止了研究。所以心里一直发憷。 当然这件事如果我不做,估计没有人去做。为了自己的信息检索大作业(文本分类)。还是要好好的努力下。 之后在google上搜索各种svm相关的代码和使用方法。(原创 2008-11-17 19:22:00 · 3842 阅读 · 9 评论 -
谈谈数据结构精髓--为什么学数据结构
现在感觉自己废话很多。 有些自觉经典,但却没有记录下来,可惜。最近感觉数据结构应该教授些精髓的东西而不是去教应该怎样编程,或者讨论这段程序到底是干什么的。现在问些数据结构的东西。大家看看能不能答上来...1为什么顺序表比二叉树的查询速度慢?2到底什么是栈,什么是队列,什么是树,什么是图,什么是堆?3用数组到底能做些什么事?4链表在哪些方面优于数组?5为什么快速排序比冒泡原创 2007-01-20 21:42:00 · 2311 阅读 · 2 评论 -
MiniDB实训第十三天
今天又重构了多个方法。包括一个Select方法,返回的只是Row的指针,并没有重新克隆一个新的Row返回。这个方法更加通用,其他的select方法只是在此基础上克隆了新的Row。 修改了一下Insert()和delete()的对外接口,现在发现更新并没有太多的用处。。暂时还没有测试和更改更新数据这项功能。 将PrimaryKey和ForeignKey抽原创 2007-07-27 21:32:00 · 1213 阅读 · 0 评论 -
聊天,吃饭
昨天一上午都在和睿哥聊天。然后十一点和他吃了顿饭。 算法老师就是不一样。给我说了一通算法。什么分支定界,NP,完全NP等等。又推荐了李佳同的书。“李佳同”不知道我把他名字写错了没有。然后给我说了他要带的课程设计(动态交通图),又问我参不参加。我说当然参加,但是2+2,测试班选的是操作系统和数据库。开发班才能选数据结构。睿哥说没有问题,一切由他搞定。睿哥说现在研究原创 2007-05-24 10:50:00 · 960 阅读 · 1 评论 -
字符串匹配算法
基本思想是从源字符串的起始位置起每个字符匹配。如果中间出现失配,则回溯到某个位置再行匹配。1.最简单的就是回溯到前一次失配串的第二个字符再行匹配,并将目标串的起始位置重置。 int Index(const char * src,const char * des,int start)...{ int lengthSrc = strlen(src); int length原创 2007-12-02 19:06:00 · 2638 阅读 · 4 评论 -
做题练习--归并排序,穷举
最近比较闲,抽空练练爪子: 多路归并 void MergeLines(int* temp,int* A,int left,int right)//其中temp是临时存储空间,A是真正的存放数据空间,left是数组的最左下标,right是数组的最右下标。...{ //先判断些特殊的边界条件 if(right-left 1)原创 2007-12-13 11:38:00 · 1194 阅读 · 1 评论 -
中序,先序生成树算法
输入两个串: string midOrder = "HDIBJEKALFMCNGO"; string firstOrder = "ABDHIEJKCFLMGNO";输出一棵二叉树。 算法思想很简单,在先序中的第一个节点一定是根节点,此节点在中序中的位置可以将中序分为左右两棵子树。如:根为A,中序分为:HDIBJEK A LFMCNGO,这两棵子树在使用同样的方法就生原创 2007-12-21 11:25:00 · 2190 阅读 · 0 评论 -
求集合子集问题
//src是源数据集合,currentIndex是在源集合里的当前下标,length为源集合的大小,dest是结果集合,num是结果集合的元素个数,初始化时,结果集合要和源集合的个数相等.void match(int* src,int currentIndex,int length,int* dest,int num)...{ if(currentIndex == length)原创 2007-12-25 12:11:00 · 1261 阅读 · 0 评论 -
Google puzzle
1. Solve this cryptic equation, realizing of course that values for M and E could be interchanged. No leading zeros are allowed. WWWDOT - GOOGLE = DOTCOM 虽然找到O+L = O 或者 O - 9 -1 = O的规律,但是还是认为自己大脑原创 2008-01-02 22:24:00 · 1206 阅读 · 0 评论 -
编程练习——二叉查找树(BinarySearchTree)
BinarySearchTree和BinaryTree其实可以使用相同的构造和析构函数,所以继承吧。懒得再写一遍templateclass BinarySearchTree:public BinaryTree{public: BinarySearchTree(T& data):BinaryTree(data) { } ~BinarySearchTree() { } void in原创 2008-08-19 11:50:00 · 1100 阅读 · 0 评论 -
编程练习——二叉树(BinaryTree)
先写一个树节点类。使用Temple也可以,不使用的话,使用特定类型,用法比较局限。不过本着“今天尽量不要做出今天不必要的决定”极限编程法制。做一个特殊类型的BinaryTree,也未尝不可。这里的TreeNode只有数据域。 templateclass T>class TreeNode{private: T data; TreeNode * left;原创 2008-08-19 11:36:00 · 2141 阅读 · 0 评论 -
快速排序其他实现代码
int hoare_partition(int a[],int low,int high){ int x=a[low]; int i=low-1; int j=high+1; while(1) { do{j--;} while(a[j]>x); do{i++;}转载 2008-08-19 20:05:00 · 1221 阅读 · 7 评论 -
编程练习——平衡树(AVLTree)
AVLTree本身就是二叉查找树。为了保证查找效率在O(nlogn),所以有时要对树高进行必要的调整。AVLTree拥有自己的法则使得插入、删除、查找都在O(nlogn)时间内完成。下面写了一个AVLTreeNode类,好像和TreeNode类一样。 下面写AVLTree类,这个类重要的地方在与插入和删除操作。查找操作和BinarySearchTree一致。但是至今还没有找到一个有原创 2008-08-19 17:30:00 · 1080 阅读 · 0 评论 -
创造练习——自适应树(self-adjusting Tree)
这个树的定义的确很有问题。其实AVLTree和SplayTree以及RedBlackTree都是self-adjusting Tree因为如果是树做索引那么大部分的时间将用来查找。这个树在查找上可以将查找的节点提升到树根,插入时也是一样。这样提高了查找的效率。并且操作系统有一种说法是近来用到的,将来用到的几率也会很大(LRU原理)。删除,既然删除对于此树来说再也没有什么,那就直接删除算了。原创 2008-08-19 19:06:00 · 1895 阅读 · 0 评论 -
编程练习——红黑树(RedBlackTree)
在网上搜索了很多红黑树的资源,发现自己看代码的能力还是有些欠缺。很多都看不懂,后来找到一篇英文红黑树文献,终于弄明白了红黑树的删除插入是怎么做的。但是那片文献好像还有些漏洞,其中有一种删除情况,他并没有考虑到。如果大家想看的话可以搜索下 "red-black trees" ,由 prof. Lyn Turbak所写。因为时间关系,插入算法只是实现了非CLR算法。删除算法我也不知道叫什么名字(原创 2008-09-09 16:48:00 · 1295 阅读 · 1 评论 -
编程练习——伸展树(SplayTree)
伸展树用于查询结果的概率非平均情况,即起初假设某些要查询的信息偏多,有些信息几乎无人问津。对于平均访问概率来说,使用SplayTree实现并不是一个明智的选择。可能会用到此数据结构的程序:词典或者多维搜索树,还有连接/切除树(link/cut tree)(这个树是用于网络优化问题包括最大流和最小代价)/** create by chico chen* date: 2008/原创 2008-10-03 09:30:00 · 1469 阅读 · 1 评论 -
编程练习——求无序数组第k小的数
为同寝的家伙写了一个求一个无序数组中第k小数的程序。思想就是快排的思想。找一个点,然后放到末尾,然后将小于这个数的值放在数组前面,大于这个值的放在数组后面,然后在将这个末尾的数放回。这个末尾数放入的位置i代表已经找到第i小的数。下面你应该明白了吧,放入的位置如果是k,恭喜你找到了第k小的数。同样找到第k大的数类似的解法,找到前k个最大数也一样。找一个数组的中位数也一样做。求n个数组的中位数也一原创 2008-10-20 22:29:00 · 2251 阅读 · 1 评论 -
毕业设计公交选路算法
这是自己的毕业设计论文。其实算法感觉上也没有什么高深的,只是至今还没有用那个算法而已。前一个算法是导师想到的,后一个算法是自己看了大量的论文发现还为提出的。这篇论文估计已经存在在湖大的档案室中了。本来想投稿到某个杂志发表一下。但是自己迟迟未整理文章,没有将文章缩减至7000字一下。所以发表的概率也不大。而且还要交版面费。索性发表到csdn,供各位做电子地图的人参考一下。原创 2008-10-07 08:34:00 · 1624 阅读 · 1 评论 -
stl upper_bound函数实现
<br />写了一个upper_bound的实现。其中递归使用二分法求解最上界,虽然写的完全不像STL的风格,但是练手还是可以的。<br />#include<iostream>#include<iterator>#include<cstring>#include<cassert>using namespace std;int UpperBound(int* a, int start, int end , const int& value){ int mid = 0; int i原创 2010-07-13 19:50:00 · 1314 阅读 · 0 评论