
数据结构与基本算法
Sodaoo
Deep Inner Peace
展开
-
16 - 12 - 12 平衡二叉树 (AVL树) --代码详解
平衡因子为正:右旋 平衡因子为正:左旋 简记:右边为正左为负。关键:把不平衡消灭在最初时刻: 那么我们先来看插入代码,在一个一个插入的过程中,消灭不平衡就是我们的理念啦~int InsertAVL(BiTree *T,int e,int *taller){ if(!T) { /*插入新节点使树长高,至taller为TRUE,是不是看不懂 (!T)?,先到下面看看 第4个if原创 2016-12-12 15:38:45 · 1051 阅读 · 0 评论 -
17 - 01 - 04 POJ 3349 (hash)
Snowflake Snow SnowflakesTime Limit: 4000MS Memory Limit: 65536KTotal Submissions: 39915 Accepted: 10475DescriptionYou may have heard that no two snowflakes are a原创 2016-12-26 11:38:45 · 353 阅读 · 0 评论 -
16 - 12 - 31 二叉排序树
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef int KeyType;typedef struct { KeyType key;};typedef struct Node{ DataType data; struct Node *lchild,rchild;}BTNode,*BiTr原创 2016-12-23 23:57:58 · 402 阅读 · 0 评论 -
16 - 12 - 25 哈夫曼编码算法-实现代码
哈夫曼编码原创 2016-12-20 19:44:17 · 874 阅读 · 0 评论 -
16 - 12 - 13 B树(2-3 树,2-3-4 树)
今天来不及了!!明天写!!啊啊B树 我们前面讨论过的数据结构都是在内存中完成操作的, 因此考虑的都是内存中的时间复杂度, 但是如果要操作的数据非常之大,如数据库中的千万条数据表, 硬盘中的上亿个文件时,对数据的处理就需要不断地从外存调入,调出。 一旦涉及外存,关于时间复杂度的计算就会发生改变, 访问该集合元素的时间,已经不仅仅是 寻找该元素所需比较次数的函数,我们必须考虑对 外存设备的访原创 2016-12-12 21:41:30 · 586 阅读 · 0 评论 -
16 - 12 - 19 十大排序算法总结(四) 之 快速排序
八、快速排序在前面介绍的几种排序算法, 希尔排序相当于直接插入排序的升级,它们属于插入排序类, 而堆排序相当于简单选择排序的升级,它们是属于选择排序类, 而接下来介绍的快速排序就是冒泡排序的升级,它们属于交换排序类。快速排序(Quick Sort)的基本思想是: 通过一趟排序将待排序记录分割成独立的两部分, 选取一个元素(一般是无序表首元素)作为枢轴,其中目的是 使枢轴左边的元素都比不比原创 2016-12-16 11:10:40 · 880 阅读 · 0 评论 -
16 - 12 - 16 “排序算法”的稳定性 详解
一、 笔试常考:稳定性: 排序算法的稳定性大家应该都知道, 通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 如下: 令狐冲/张无忌的 1/4 4/1 没有变的是稳定排序。/键 指的是数据域元素,在排序问题中,通常将数据元素称为记录。//: 其次,说原创 2016-12-14 16:54:04 · 525 阅读 · 0 评论 -
16 - 12 - 15 散列表
若关键字为k,则其值存放在f(k)的存储位置上。 比如搜索”丁磊”,直接跳转到“网易”圈内, Hash(丁磊) = “网易”。这就是一个函数关系,而不需要进行 顺序搜索 巴拉巴拉由此, 不需比较便可直接取得所查记录。称这个对应关系f为散列函数, 按这个思想建立的表为散列表。 对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为Collision(冲突)。原创 2016-12-13 19:24:53 · 514 阅读 · 0 评论 -
16 - 12 - 18 十大排序算法总结(三) 之 归并排序
归并排序原创 2016-12-16 09:41:06 · 490 阅读 · 0 评论 -
16 - 12 - 17 十大排序算法总结(一) 之 冒泡,简选,直插,希尔排序
希尔原创 2016-12-14 21:47:51 · 713 阅读 · 0 评论 -
16 - 12 - 17 十大排序算法总结(二) 之 桶排序,堆排序
五、桶排序 堆排序原创 2016-12-15 18:01:12 · 1185 阅读 · 0 评论 -
16 - 12 - 09 拓扑排序 (C++)
拓扑 不存在回路,就像流程图一样向下延伸。称AOV网图。 拓扑排序就是按照箭头顺序往后排的,是为了解决一个工程能否顺利进行的。拓扑排序还有一个重要的功能就是判断节点是一条链,还是在某个节点出现了分叉。排序的基本思路:…………方法一 现在我们可以得到这个算法的基本步骤: 1.构造空列表 L和S; 2.把所有没有依赖节点(入度为0)的节点放入L; 3.当L还有节点的时候,执行下面步骤:原创 2016-12-09 12:23:18 · 577 阅读 · 0 评论 -
16 - 12 - 08 弗洛伊德算法(Floyd)-最短路径 - Фрейд
带权图中单个源点到所有顶点的最短路径问题可以用 迪杰斯特拉算法 http://blog.youkuaiyun.com/sodaoo/article/details/53495517那如果要求图中每一个顶点与其它顶点之间的最短路径呢?可以想到的方法为: 每次以一个顶点为源点,重复执行地杰斯特拉算法算法n次。 这样,理论上我们便可以求得每一个顶点与其它顶点的最短路径,总的执行时间为O(n3)。 不过为了美观原创 2016-12-07 21:10:31 · 667 阅读 · 0 评论 -
16 - 11 - 06 约瑟夫问题(链表应用)-------《深入浅出数据结构》
l 约瑟夫问题原创 2016-11-06 16:54:39 · 413 阅读 · 0 评论 -
16 - 12 - 14 红黑树(一)(性质、插入)
红黑树原创 2016-12-13 13:01:28 · 491 阅读 · 0 评论 -
16 - 12 - 13 B 树 ( 2 - 3 树 ) 代码实现
(了解即可)~ 代码存疑: 根节点的关键字数量不应该是【2,M-1】,除根之外的非根节点关键字的数量不应该是【M/2,M-1】吗?/* btrees.h */ #define M 1 typedef int typekey; typedef struct btnode { /* B-Tree 节点 */ int d; /* 节点中数据元素的数目 */ typek原创 2016-12-13 11:26:16 · 729 阅读 · 0 评论 -
16 - 12 - 10 关键路径代码(C++)
整个代码非常简洁,但是今天我的心情很差,并不想看。等再过几个星期我再来写一写代码详解////// 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 好烦啊~~~呱呱 喵喵 leap frog linglingling~#include <iostream>#include <cstdio>#include<string.h>using namespace std原创 2016-12-09 18:37:39 · 670 阅读 · 0 评论 -
16 - 12 - 11 平衡二叉树 ( AVL树 )
平衡二叉树: 首先是一棵二叉排序树。左右子树的高度差最多等于1.而且每一个根节点的左右子树也都是二叉平衡树。 左子树深度 - 右子树深度 叫做平衡因子 ( BF: balance factor ) BF = -1,0,或1。 我们要在插入构建时,每次插入一个节点后,都检查一下是否插入的这个节点破坏了某一个根结点的平衡性 (BF越界), 如何将一棵不平衡的二叉树变成平衡二叉树,平衡二叉树的失原创 2016-12-11 11:08:10 · 939 阅读 · 0 评论 -
16 - 12 - 20 KMP算法 模式匹配 终极奥义!
尊重产权,转载请注明出处。ex:找一个单词在一篇文章中的定位 问题 :这种子串的定位操作 通常叫做 串的模式匹配。 ex 我们要从 goodgoogle 中 找 google 这个单词。 朴素的方法是: 1、取子串的第一个字符叫做子首,主串 向后查找, 直到找到第一个与子首相等的字符叫做主首;2、子首后移一位,主首后移一位,再次比较(重复此过程) 要是直到查找了n次(n = 子串长原创 2016-12-17 08:48:29 · 846 阅读 · 0 评论