随笔分类 -  算法导论读书笔记

摘要:红黑树是一棵二叉搜索树,每个结点上增加了一个属性来存储颜色是红色还是黑色,红黑树可以确保没有一条路径会比其他路径长出2倍,所以近似可以认为是平衡的。 每个结点包含5个属性:color, key, left, right, p。如果一个结点没有子结点或者父结点,则该结点的相应指针属性为NIL,这些NI 阅读全文
posted @ 2018-08-13 16:19 GrayWind 阅读(1443) 评论(0) 推荐(0)
摘要:单源最短路径问题是指,给定一个图G=(V,E),希望找到从给定源结点s到每个节点v的最短路径。单源最短路径问题可以用来解决很多最短路径的变体。 单目的地最短路径问题:找到从每个结点v到给定目的地结点t的最短路径。将图的每条边翻转,这个问题可以转换为单源最短路径问题。 单结点对最短路径问题:找到从给定 阅读全文
posted @ 2018-08-12 14:29 GrayWind 阅读(1316) 评论(0) 推荐(0)
摘要:对于一个连通图来说,我们可以去掉其中一些边依然保持其连通的性质,在这些图中存在一个或多个图,他们的路径总和是最小的,这样的图必然是树。因为,如果说图中存在环,则去掉环的一条边依然可以保证连通性,这与总路径和最小是矛盾的。这样的图被称为最下生成树。城市间铺设电路就可以利用最小生成树来进行规划。 如图所 阅读全文
posted @ 2018-08-07 18:11 GrayWind 阅读(635) 评论(0) 推荐(0)
摘要:对于图G=(V,E),V代表点,E代表边。图有两种标准的表示方法:邻接矩阵法和邻接链表法。 邻接链表法适合表示边的条数少的稀疏图,可以节约存储空间。对于有向图G来说,边(u,v)一定会出现在链表Adj[u]中,因此,所有链表的长度之和一定等于|E|。对于无向图来说,边(u,v)会同时出现在Adj[u 阅读全文
posted @ 2018-08-06 15:54 GrayWind 阅读(704) 评论(0) 推荐(0)
摘要:不相交集合的操作 一些应用涉及将n个不同元素分成一组不相交的集合,常进行两种操作:寻找包含制定元素的唯一集合以及合并两个集合。操作进行以下定于: MAKE-SET(x)建立一个新的集合,仅含有x UNION(x,y)将包含x和y的两个集合合并成一个新的集合,删除原本的集合 FIND-SET(x)返回 阅读全文
posted @ 2018-08-04 19:03 GrayWind 阅读(265) 评论(0) 推荐(0)
摘要:斐波那契堆是具有最小堆序的有根树的集合,也就是集合中的每棵树都具有父结点的关键字小于或等于子结点的关键字。 对于每一个结点x,主要有以下属性: 名称 说明 记作 关键字 结点存储的值 x.key 父结点 结点的父亲 x.p 左兄弟 结点的左兄弟 x.left 右兄弟 结点的右兄弟 x.right 孩 阅读全文
posted @ 2018-08-02 20:15 GrayWind 阅读(1087) 评论(0) 推荐(0)
摘要:贪心算法(greedy algorithm)是指,在每一步都做出当时看起来最佳的选择,也就是局部最优的选择,期望这样的选择能够导向全局最优解。所以并不是所有的问题都能得到全局最优解。 典型的例子如分数背包问题:背包容量为50kg,有三个商品分别是重60元/10kg、100元/20kg、120元/30 阅读全文
posted @ 2018-07-31 17:24 GrayWind 阅读(341) 评论(0) 推荐(0)
摘要:动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f( 阅读全文
posted @ 2018-07-24 21:19 GrayWind 阅读(968) 评论(0) 推荐(0)