数据结构
不要做程序员的小松鼠
愉快的调bug......
展开
-
个人学习——数据结构:KMP算法next函数序列计算
至于KMP是什么,next函数是什么我就不多说了,直接上方法:首先明确什么是前缀什么是后缀: abcd 前缀:abc ab a 后缀:d cd bcd例1 abaabcac 这个字符串一共有8位,若没有前缀和后缀相等为其他情况,置1,若有相等,置长度加1,一位相等置2类似。。。。。 1.第一位时,果断是0(函数说明里有,各种数据结构教材也有)原创 2015-10-13 16:03:31 · 6528 阅读 · 1 评论 -
二叉树主要知识点总结
1.二叉树第i层至多有2^(k-1)个结点(i>=1)。 2.深度为k的二叉树上,至多含2^k-1个结点(k>=1) 3.n0 = n2 + 1(度) 4.满二叉树:深度为k且含有2^k-1个结点的树。 5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。 (树中所含n个结点和满二叉树中编号为1至n的结点一一对应)。 6.具有n个结点的完原创 2016-05-02 20:34:59 · 6494 阅读 · 0 评论 -
哈夫曼树相关知识点总结
1.哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。2.哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。3.构造1.权值最小的两个结点,构造成一棵二叉树,该二叉树的权值为两个结点之和,并把该二叉树看成结点。2.重复1步骤。3.哈夫曼编码:字符出现次数等同于权值,是变长原创 2016-08-08 20:41:36 · 3689 阅读 · 0 评论 -
排序算法:归并排序
归并排序1. 将若干有序序列逐步归并为一个有序序列。2. 二路归并:最简单,将若干有序序列两两归并,直至形成一个有序序列。3. 采用的分治法。4. 二路归并非递归思路: 1. 将序列分成n个序列,每个序列一个元素,这样可以任务每个序列都是有序序列。 2. 逐一合并两个相邻的序列,使得每个序列长度为2. 3. 重复步骤2,直到序列的长度为n。 4. 子序列合并过程原创 2016-05-23 21:37:50 · 4192 阅读 · 1 评论 -
排序算法:堆排序
堆排序1. 堆: 1. 一种完全二叉树。 2. 每个结点的值都大于或等于其左右子结点的值,大顶堆。 3. 小顶堆同理。2. 是简单选择排序的一种改进:把每次比较的结果用堆来保存起来。3. 堆排序(大顶堆): 1. 将待排序列构造成一个大顶堆。 2. 将堆顶和待排序列最后一个元素交换,也就是保存起来。 3. 将剩余的序列(去除最后一个元素)重新构造成原创 2016-05-14 10:11:06 · 596 阅读 · 0 评论 -
排序算法:快速排序
int Partition(int r[], int first, int end){ int i=first; int j=end; //初始化第一个元素为key while (i<j) { while (i<j && r[i]<= r[j]) j--; //右侧扫描 //走到这原创 2016-05-17 21:33:55 · 438 阅读 · 0 评论 -
AVL树原理通俗解释与例子
AVL(Adelson-Velskii and Landis)树是带有平衡条件(balance condition)的二叉查找树。这个平衡条件必须容易保持,而且必须保证树的深度是O(logN)。AVL树规定其每个结点的左子树和右子树的高度最多差1。BF(Balance Factor) = 二叉树上结点的左子树深度 - 右子树的深度。平衡二叉树上的结点的BF值只能是1 -1 0,只要有一个结原创 2016-04-21 16:37:12 · 3167 阅读 · 0 评论 -
STL 使用遇到的问题汇总(更新中)
1.二重容器写法: vector > array2(3);// 注意> 和> 之间的空格!!!原创 2016-05-05 09:30:55 · 450 阅读 · 1 评论 -
C++ 结构体指针的定义
struct node { …… } ; struct node *p1, *p2 ;typedef struct node { …… }Node;typedef Node* pNode;typedef struct node { ……}*pNode;原创 2016-05-02 21:49:57 · 4734 阅读 · 0 评论 -
个人学习——算法:递归式复杂度计算(主方法)
在分析根据递归方程分析算法的时间复杂度时,常见到如下形式的方程, T(n) = a * T(n/b) + f(n) a >= 1,b > 1,f(n)一般是个简单函数这时可以有2种方法,来计算时间复杂度: 一是用递归树,逐层代入原式,最终形成一个级数,然后用一个函数来表达,得到T(n)。 二是应用主项定理Master Method 。其实,主项定理也就是对递归树方法的一种归纳,形成了固定的原创 2015-10-12 15:18:44 · 4688 阅读 · 0 评论 -
如何计算时间复杂度
一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c<>0 =>O(n^2)依此类推 eg: (1) for(i=1;i<=n;i++) //循转载 2015-10-09 16:46:29 · 780 阅读 · 0 评论 -
树、森林与二叉树的转换
树转换为二叉树兄弟间连线只保留父节点与第一个兄弟的连线调整层次森林转换为二叉树每棵树转换为二叉树将每棵树的根节点“看作”兄弟(不是真的当作兄弟)调整层次二叉树转换为树若x是父节点y的左孩子,则把x的右孩子、右孩子的右孩子......,都与y用线连接起来。删去原来二叉树中所有双亲节点与右孩子的连线。调整层次动画演示推荐:原创 2016-01-12 16:55:20 · 681 阅读 · 0 评论 -
个人学习——排序算法:直接插入排序&希尔排序(C++)
直接插入排序方法:将一部分排好序,然后将之后的关键字插入排好序的有序序列中。 例子:12,15,9,20,6,31,24 - 个人算法及实现一次插入排序:将最后一个数num[j],插入之前存在的序列里从有序序列的最后一位num[i]开始向前遍历如果(num[j] < num[i]) && (num[j] >= num[i - 1])或者(num[j] < num[i]) && (i原创 2015-12-01 18:12:11 · 638 阅读 · 0 评论 -
二叉排序树(Binary Sort Tree)
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。查找: 根结点的关键字值等于查找的关键字,成功 若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。 若子原创 2016-09-03 10:41:17 · 697 阅读 · 0 评论