Quantcast
Channel: 四号程序员 »重读
Browsing latest articles
Browse All 10 View Live

数据结构重读 –有向无环图、AOV网和拓扑排序

DAG和概念 有向无环图:顾名思义,有向图,且不含环,directed acycline graph,简称DAG图。 无向图检查环:若深度优先遍历过程遇到回边(先前访问过的顶点的边),则必定存在环。 有向图检查环:从某个顶点v出发,在dfs(v)结束前,出现一条从顶点u到顶点v的回边,由于u在生成树上是v的子孙,则有向图必定存在包含顶点v和u之间的环。...

View Article



Image may be NSFW.
Clik here to view.

数据结构重读 – AOV网和关键路径

与AOV网对应的,还有一个AOE网,当然它也是有DAG(向无环图)。 AOE(Activity On Edge)网:顾名思义,用边表示活动的网。 与AOV不同,活动都表示在了边上,如下图所示: 如上所示,共有11项活动(11条边),9个事件(9个顶点)。 整个工程只有一个开始点和一个完成点。 即只有一个入度为零的点(源点)和只有一个出度为零的点(汇点)。 (1)...

View Article

数据结构重读 –单源最短路径(Dijkstra)

单源最短路径:给定带权有向图和源点v,求从v到G中其余各点的最短路径。 Dijkstra算法非常类似于最小生成树算法(的Prim)。 算法: 0、假设源为v0,设置辅助变量dist和pre,优先队列pq,按照dist[x]从小到达排序(小顶堆)。 1、如果v0->i连通,初始化dist[i]为w[v0][i]。放(dist[i], i)入pq。 2、循环,直到pq为空。...

View Article

数据结构重读 –所有点对最短路径(Floyd算法)

如果我们要求每一顶点对之间的最短路径,怎么做呢? 方法1:对N个顶点,依次执行前面的Prim算法。 方法2:使用Floyd算法。 实际上,Floyd算法是动态规划(DP)算法。 原理很简单,我们假设dp[i][j]表示从顶点i到顶点j的最短路径,则dp[i][j] = min (dp[i][k]+dp[k][j], 0<=k<=nvexs)。 于是算法如下:...

View Article

数据结构重读 –顺序和二分查找、最/次优查找树、索引顺序表查找

概念明天补上。。。 顺序查找,用了哨兵,减少检查数组长度的次数,据说这样可以让顺序查找的性能提升一倍。 优点:无序任何假设条件(如数组有序等)。 缺点:效率低。 [crayon-55f0c9fe08d46949310928/] 二分查找:据说98%的程序员写不对,我这个是不是也有Bug呢? [crayon-55f0c9fe08d4d984244825/]      

View Article


数据结构重读 –二叉排序树(BST)

1、前面讨论了静态查找表,它们的特点是,数据是一次性就给好了。 2、而对于动态查找表,数据可以是在查找过程中动态添加、生成的。其实这概念不太严谨。 3、二叉排序树(BST):左子树上所有结点的值均小于根结点的值;右子树上所有结点的值均大于根结点上的值。 4、二叉排序树的查找过程: (1)若树为空,直接返回/跳出。 (2)树非空,则 (a)若key==root.data,return true。...

View Article

数据结构重读 –平衡二叉树(AVL树)

大二那会根本没蹋下心来看,觉得天书一般,连旋转都没搞明白。 今天仔细看了书,发现真的一点不难啊,鄙视自己…… 首先是概念: 平衡二叉树是为了解决前面二叉排序树不均衡的问题,而加入了一种平衡机制。所以,平衡二叉树是一种特殊的二叉排序树(BST)! AVL树查找的平均和最差复杂度都是O(logn) !!!(BST的最坏是O(n)) AVL树的插入复杂度是O(logn)。...

View Article

Image may be NSFW.
Clik here to view.

数据结构重读 – B树、B-树、B+树、B*树

本文是转载的,《B树、B-树、B+树、B*树》 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;...

View Article


Image may be NSFW.
Clik here to view.

数据结构重读 –键树、字典树

键树,又称数字查找树(Digital Search Trees)是一棵度>=2的树,每个结点只含有组成关键字的符号。 键树有两种存储结构: 1、树的孩子-兄弟链表来表示键树。 每个Node有三个域:first指向第一棵子树的根指针;next指向右兄弟;info(可选的)记录附加数据。如下图:...

View Article


数据结构重读 –哈希表

无论是折半查找、二叉排序树查找还是B树,性能都依赖于查找中的比较次数。 一种理想情况是不经过任何比较,一次直接定位索要查找的记录,即:若数据结构中存在关键字和K相等,则其必定在f(K)的存储位置上,我们称这个对应关系f为哈希函数。 冲突(Collision):对不同的关键字,可能得到同一哈希地址,即存在key1!=key2,但f(key1)=f(key2)。此时称为冲突或碰撞。...

View Article
Browsing latest articles
Browse All 10 View Live




Latest Images