E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
算法导论-CLRS
Dijkstra算法——《
算法导论
》学习心得(十三)
个人blog迁移到www.forwell.me这两天在做一个项目,关于北京市出租车的,然后用到了Dijkstra算法,所以这篇文章就先写Dijkstra算法了。在大二下的时候学了数据结构,书里面也讲了Dijkstra算法,但是当时怎么也没理解,结果考试的时候就考了,哎蛋疼!现在用到了,又得硬着头皮去学,结果很快弄明白了,只是在写代码时出了一些很低级的错误,调Bug用了不少时间。最后总结只能说:不是
小小程序猿_
·
2020-08-20 13:23
算法导论
“学习笔记”之《
算法导论
》----第六部分----图算法----第二十三章----最小生成树
本人大四即将结束,于2018年12月18日购《
算法导论
》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接。
Mr.Naruto
·
2020-08-20 13:15
算法导论
MIT
算法导论
-第12讲-最小生成树-Kruskal算法+并查集
基本思想Kruskal算法构造最小生成树的过程为:先构造一个只含n个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有n棵树的一个森林。之后,从网的边集E中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类
清文
·
2020-08-20 12:26
算法导论
算法导论
第二十三章 最小生成树
def:对于图G(V,E)集合E中的边带有权重,存在一个包含所有节点的树并树边为E的子集,使得所有边的权重最小,则该树称为最小生成树。32.1最小生成树的形成我们使用贪心算法来找到一个最小生成树23.2Kruskal算法和Prim算法两个算法一个直接对边权重大小进行排序,一步步加入到树中;另一个则是根据跨越分割的边(既从树节点到未加入树的节点的边)的权重来选择节点。示意图如下:实现代码如下:cla
pokeyode
·
2020-08-20 12:49
算法笔记
算法导论
学习笔记(七):贪心算法
转载请注明原作者@yoshino,强烈要求支持TOC目录和数学公式的输入!更新不及时,有空慢慢写吧,原文是写在Bear上粘贴来的,可能格式有点乱。具体的工程在我的github上。贪心算法(greedyalgorithm)在每一步都做出当时看起来最佳的选择,通过做局部最优的选择,寄希望这样的选择能导致全局最优解。贪心算法并不能保证一定能得到最优解,但是对于很多问题确实可以的到最优解。贪心算法设计过程
yoshino
·
2020-08-20 12:21
算法导论
第22章:基本的图算法
目录图的表示特殊的图图的遍历拓扑排序(TopologicalSort)强连通分量(StronglyConnectedComponents)欧拉回路(EulerianCircuit)题选图的表示1.邻接矩阵(AdjacencyMatrix)2.邻接链表(AdjacencyList)3.完善邻接链表(ImplementingAdjacencyList)4.握手定理:无向图所有结点的度之和=边数*2特殊
Salmon_lee
·
2020-08-20 12:29
算法导论
算法导论
-用于不想交集合的数据结构(并查集)-kruskal最小生成树算法
并查集学习:并查集:(union-findsets)一种简单的用途广泛的集合.并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x)把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元
JKhere
·
2020-08-20 12:33
算法导论
&&
ACM
算法导论
-第22章-基本的图算法-22.3 深度优先搜索-22.3-7-使用栈来代替递归实现DFS
题目:重写过程DFS,利用一个栈来消除递归代码:#include#includeusingnamespacestd;#defineN10#defineWHITE0#defineGRAY1#defineBLACK2//边结点结构structEdge{intstart;//有向图的起点intend;//有向图的终点inttype;//边的类型Edge*next;//指向同一个起点的下一条边Edge(i
思翊
·
2020-08-20 12:16
数据结构和算法
算法导论
习题解-第22章基本的图算法
总结深度优先搜索按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自算法概论bydasgupta)有向无环图和拓扑排序有向图有环当且仅当DFS过程中遇到回边。有向无环图中每一条边都指向一个finish值更小的顶点。对于DFS,无环性、可线性化、无回边三者是等价的。拓扑排序的两种方式:(1)由上述性质
groovy2007
·
2020-08-20 12:13
算法
《
算法导论
》笔记 第22章 总结与思考
【总结】【思考】22-1通过广度优先搜索对边进行分类22-2挂接点、桥以及双连通分支a)G_π的根是G的挂接点,当且仅当在G_π中该根顶点至少有两个子女。b)设v是G_π中的某一非根顶点,证明v是G的挂接点当且仅当v有一个子顶点s,使得不存在从s或s的任何后裔顶点指向v的某个真祖先顶点的反向边。c)设low[v]=min(d[v],d[w]),d[w]:对v的后裔u,(u,w)是反向边试说明对所有
cyendra
·
2020-08-20 11:57
算法导论
算法导论
从零单排
2016.11.30开始,每周两章。2.1-1以图2-2为模型,说明INSERTION-SORT在数组A={31,41,59,26,41,58}上的执行过程31,41,5926,31,41,59循环*326,31,41,41,59循环*126,31,41,41,58,59循环*12.1-2重写过程INSERTION-SORT,使之按非升序(而不是非降序)排序forj=2toA.length{key
晨辰辰辰辰
·
2020-08-20 11:39
算法导论
第22章部分答案
参考https://blog.csdn.net/github_35807147/article/details/7911080122.1-1给定有向图的邻接链表,需要多长时间才能计算出每个结点的出度(发出的边的条数)?给定时间才能计算出每个节点的入度(进入的边的条数)?一个图G(V,E),(V为点数,E为边数),邻接链表空间为O(V+E)。而邻接表要遍历,因此计算每个节点的出度和入度的总时间都为O
是Mally呀!
·
2020-08-20 11:40
断篇
算法导论
| 第24章 单源最短路径
零、基础1、单源最短路径问题:给定一个图,找到从给定源结点s,到每一个结点v的最短路径。2、可以在这个问题上进行扩展:①单目的地最短路径问题:找到从每个结点v到目的地t的最短路径。----将图的每个边的方向翻转,求解单源最短路径问题(这里必须要通过翻转边的方向,才能有下一步的遍历,不能简单的看从t到v的最短路径!)②单节点对最短路径问题:找到指定结点u到指定结点v的最短路径。③所有结点对最短路径问
solar一抹阳光
·
2020-08-20 11:01
算法导论
算法导论
——24.3 Dijkstra最短路径算法java实现
介绍迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是典型的算法。Dijkstra算法是很有代表性的算法。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN,CLO
The_sam
·
2020-08-20 11:17
学习笔记
算法
算法导论
算法导论
单源最短路径 Dijkstra
intkey;VertexNode*p;pFNodepf;}Vertex,*pVertex;//图typedefstruct{intvn;int**E;pVertex*V;}Graph,*pGraph;//根据
算法导论
图
万万岁
·
2020-08-20 10:57
算法导论
算法导论
最小生成树MST-KRUSKAL
#include#include//用于边排序和结果集合typedefstruct{intu;intv;intw;}EdgeSortNode,*pEdgeSortNode;//用于不相交森林typedefstructSN{intvi;structSN*p;intrank;}SetNode,*pSetNode;//图节点typedefstruct{charname;pSetNodesnode;}Ve
万万岁
·
2020-08-20 10:56
算法导论
算法导论
第23章 最小生成树 ,Kruskal算法,和Prim算法d
最小生成树问题是给定一个连通无向图(V,E),相应边的权值,要求一个无环子集T⊆E,并且连接了所有的顶点,而且所有边权值相加最小。由于是连通的无环的,所以必然是一棵树。两种常用的方法Kruskal算法和Prim算法都采取的是贪心策略,只是贪心策略有所不同。而且这两个贪心策略都可以用一个通用的方法来描述。就是不停的找安全边加到集合T中,直到集合T成为最小生成树。寻找安全边的方法就是,从一个尊重集合T
Kawisa
·
2020-08-20 10:19
算法导论
算法导论
-第24章 Dijkstra算法
算法导论
用了很多引理,性质来证明Dijstra算法的正确性,这里不说了,也表达不明白,只说我理解的过程。有一个图G(V,E),选定一个源点s,维护一个集合Q=V-s,Q中点有一个
Kawisa
·
2020-08-20 10:18
算法导论
算法导论
| 22.3 深度优先搜索
概念“发现”:指节点第一次被访问“时间戳”:对于每个节点u,有两个时间戳u.d,u.f,分别表示发现节点u和完成对u的邻接链表扫描的时间(即节点u被涂上黑色的时候)。注意:在u.d时刻,节点u被涂上灰色;在u.f时刻,节点u被涂上黑色。那么在[u.d,u.f)这段时间内,节点u是灰色的。“真后代”:在深度优先搜索森林中,节点u的子孙称为其真后代。边的分类:树边(深度优先森林G.π中的边),后向边(
gywenjian
·
2020-08-20 10:49
算法导论
《
算法导论
》笔记 第22章 22.2 广度优先搜索
【笔记】在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索棵发现从s可达的所有顶点,并计算s到这些可达顶点之间的最短边数。广度优先树,根为s,且包括所有s的可达顶点。树中从s到v的路径对应于图G中从s到v的一条最短路径,即包含最少边数的路径。对有向图无向图都适用。如果u处于从根s到顶点v的路径中,那么u称为v的祖先,v是u的后裔。分析每个顶点至多只进入队列一次,至多只从队列中出来一次
cyendra
·
2020-08-20 09:32
算法导论
《
算法导论
》笔记 第24章 24.3 Dijkstra 算法
【笔记】用二项堆实现优先队列O((V+E)lgV),所有顶点都从源点可达的话,O(ElgV)。constintmaxn=11111;constintmaxm=1111111;structEdgeNode{intto;intw;intnext;};structHeapNode{intd,u;booloperatorrhs.d;}};structDijkstra{EdgeNodeedges[maxm]
cyendra
·
2020-08-20 09:32
算法导论
算法导论
总结
1、插入排序INSERTION_SORT(A)forj=2toA.lengthkey=A[j]i=j-1whilei>0andA[i]>keyA[i+1]=A[i]i=i-1A[i+1]=key循环不变式为:for循环的每次迭代开始时,子数组A[1…j-1]由原来在A[1…j-1]中的元素组成,但以按序排列。初始化:对循环技术变量的初始赋值后、在循环头的第一次测试之前,保持循环不变式。保持:每次迭
xyx_HFUT
·
2020-08-20 09:52
算法导论
《
算法导论
》Dijkstra算法实现
参考《
算法导论
》第24章-单源最短路径的方法:1.设置数组d存储每个节点到源节点的距离,维护一个提取最小d值的优先队列Q,Q初始化时是G的所有节点的集合2.
天才XLM
·
2020-08-20 08:21
算法笔记
算法导论
第22章 深度优先遍历
深度优先遍历的作用主要是对边,点的分类,如拓扑排序,找强连通分量等应用。深度优先搜索的策略是只要有可能就尽量深入。也就是说每发现一个新的点就立马对其搜索,直到与该点所连接的所有点都被搜索完全,则返回了,返回该点的前驱。由于深度优先搜索一般都是被其他算法所用,所以它要提供有效的信息,每个点保存一个d值和f值,d值是刚发现的时间,f值为结束对该点邻接点扫描的时间。比如一个孤立点,发现时间为p,则结束时
Kawisa
·
2020-08-20 08:44
算法导论
算法导论
2学习
第一部分基础知识第1章算法在计算中的作用算法的定义:算法就是一系列的计算步骤,用来将输入数据转换成输出结果。算法可以解决哪些类型的问题?1、生物问题,如DNA基因序列的分析;2、因特网,路由数据传输路径的查找、网页搜索引擎;3、电子商务,银行卡等信息的公共密钥加密技术和数字签名技术;4、制造业和其它商业应用,资源分配与人员高度;……由于计算机的计算时间和存储空间是有限的资源,所以好的算法在保证结果
oMengHen1
·
2020-08-20 07:42
算法导论
之平摊分析(动态表)
平摊分析,amortizedanalysis,对数据结构执行的所有操作的总和时间是油由求平均而得出,用来证明一系列操作中,通过对所有操作求平均代价,即时某一操作具有较大代价,但平均代价还是小的。导论中这个和平均情况分析不同,我自己到没感觉出不同,同样是求平均。Amortized,摊销之意,就是将把总代价平均到一个周期内来承担。平摊分析有什么意义呢?主要为认识数据结构。对数据结构的一系列操作,数据结
fjssharpsword
·
2020-08-20 04:48
Algorithm
算法导论专栏
【算法-动态规划】求数组的最长上升子序列(LIS)的长度
《
算法导论
》上面对于动态规划的描述对于我来说有点晦涩难懂。于是在知乎上面看了一下关于这方面的知识,这个回答貌似还不错。什么是动态规划?动态规划的意义是什么?
QiaoDog
·
2020-08-20 04:42
数据结构和算法的学习
算法导论
22.3深度优先搜索 练习总结
22.3-1画一个3*3的网格,行和列的抬头分别标记为白色、灰色和黑色,对于每个表单元(i,j),请指出对有向图进行深度优先搜索的过程中,是否可能存在一条边,链接一个颜色为i的结点和一个颜色为j的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索再制作一张这样的网格。ANSWER:22.3-2给出深度优先搜索算法在图22-6上的运行过程。假定深度优先搜索算法的第5~7行的f
funggor
·
2020-08-20 03:01
算法导论(第3版)
算法导论
程序24--直接寻址表(Python)
当关键字的全域U比较小时,直接寻址是一种简单而有效的技术。假设某应用要用到一个动态集合,其中每个元素都是取自全域U={0,1,...,m-1}中的一个关键字,这里m不是一个很大的数。另外,假设没有两个元素具有相同的关键字。为表示动态集合,我们用一个数组,或称为直接寻址表,记为T[0...m-1]。其中的每个位置,或称为槽(slot).对应全域U中的一个关键字。槽k指向集合中的一个关键字为k的元素。
夜空霓虹
·
2020-08-20 02:06
算法导论
二维数组最大子矩阵的求和
每个元素都是整数(可能小于0),求其子矩阵元素的最大和问题分析:这个问题来自一维数列最大子序列的求和问题,因此必须对一维数列最大子序列的求和有充分的了解才有讨论基础,不了解的请参考《编程珠玑》第8章或《
算法导论
wangcfbj
·
2020-08-20 01:59
2018-02-19
算法导论
课程笔记(插入,归并,代换,递归树,分治,主方法,快排)
性能就好像是平常的货币一样,我们用它交换安全和性能。Insert—Sort(A,n)伪代码forj0andA[i]>key)doA[i+1]n)θ(j)=θ(n²)因为由上面的公式可知,其为等差数列的累加过程,是算术级数(Arithmeticseries)T(n)Mere—Sortθ(1)1.Ifn=1,done2T(n/2)2.递归排序A:[1-n/2]andA:[n/2-n]θ(n)Merge
klaaay
·
2020-08-20 00:31
算法导论
(四):快排及随机化算法
麻省理工学院公开课:
算法导论
。B站地址,网易公开课也有对应的资源。https://www.bilibili.com/video/av1149902/?
LuLuX
·
2020-08-20 00:57
社群大神语录,太让我过敏(过瘾)了!(不看后悔)
300+部武侠小说阅读史,曾粗读TAOCP,概读游戏编程精粹前7部,略读具体数学、
算法导论
,熟读UNIX3部头,精读《为啥我头秃》。熟悉Windows、Linux、FreeBSD、MacOSX系统
Creator星球
·
2020-08-19 23:27
游戏
java
编程语言
python
大数据
算法导论
:关于时间复杂T(n)的表达式处理
MIT
算法导论
提供了三种方法,不废话了,直接介绍:(公式显示不了,所有就截图了,请包涵~呵呵)1.代换法:猜测->验证例如:T(n)=4*T(n/2)+n(其中T(1)=O(1))假设是时间复杂度是n^
iteye_18480
·
2020-08-19 17:03
算法导论
第二版 习题2.1-4答案
#include#definen5voidmain(){intA[n]={0,1,1,0,1},B[n]={0,0,1,1,0};intC[n+1]={0};for(inti=0;i
1054512666
·
2020-08-19 10:13
算法导论答案
算法导论
(三):分治法、leetcode 50 70 746
麻省理工学院公开课:
算法导论
。B站地址,网易公开课也有对应的资源。https://www.bilibili.com/video/av1149902/?p=3这节课主要讲解分治法解决各种问题的思路。
LuLuX
·
2020-08-19 06:58
“学习笔记”之《
算法导论
》----第一部分----基础知识----第一章到第五章
本人大四上即将结束,于2018年12月18日购《
算法导论
》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接。
Mr.Naruto
·
2020-08-19 03:48
算法导论
[Java聊天室服务器]实战之一 开篇介绍
比如最近在看网易公开课MIT《
算法导论
》,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序员不
jptiancai
·
2020-08-19 02:41
18.游戏服务器
算法导论
第13(十三)章红黑树
红黑树的定义:红黑树是一种较为“平衡的”二叉查找树,其每个结点上增加了一个储存颜色的位置,可以是红也可以是黑色的,并且有父亲结点。基本操作时间为O(lgn).红黑树的性质:1)每个结点或是红的,或是黑的。2)根结点是黑的。3)每个叶结点(NIL)是黑的。4)若一个结点是红的,则它的两个儿子都是黑的。5)对每个结点,从该结点到其子孙结点的所有路径上的黑色结点数目相同。黑高度:从某个结点x出发(不包括
Flammable_ice
·
2020-08-19 00:32
《算法导论》
算法导论
红黑树
p=30组内培训,讲红黑树,找出
算法导论
,啃了一个周末,其中插入结点很简单,删除结点有点复杂,但跟着
算法导论
上一步一步来没有什么问题。不想备份blog的图片,所以没有把图片上穿。可直接察看ppt。
ylqmf
·
2020-08-18 23:44
算法
algorithm
算法
测试
blog
c
算法导论
10.4-3 输出二叉树的每个结点的关键字
问题:给定一个n个结点的二叉树,写出一个O(n)时间的非递归过程,将该树的每个结点的关键字输出。可以使用一个栈作为辅助数据结构。思路:利用栈依次将各个结点压入栈中,输出其值后再弹出。代码:#include#includeusingnamespacestd;structNode{intkey;Node*left;Node*right;Node(intx):key(x),left(NULL),righ
臻舍
·
2020-08-18 23:08
算法导论
算法导论
之KMP
#include#includeusingnamespacestd;voidmakeNext(conststringpattern,int*next){intk,q;intm=pattern.length();next[0]=0;for(k=0,q=1;q0&&pattern[q]!=pattern[k])k=next[k-1];if(pattern[q]==pattern[k])k++;next
ThomasDX
·
2020-08-18 23:32
hash_map的简洁实现
数据结构和
算法导论
中介绍了大量的hash函
weixin_33794672
·
2020-08-18 22:09
算法:模式匹配之KMP算法
前言:昨天看到《
算法导论
》里的第32章:字符串匹配,说到一个关于字符串匹配的很好的算法——KMP。关于KMP的内存含意以及KMP的来源,不是本文讲述的范畴,请感兴趣的读者自行查阅相关资料。
weixin_30662109
·
2020-08-18 22:38
算法导论
的python实现之插入排序
在排序中,可能大家最先接触也最容易想到的应该是冒泡排序或者选择排序,然而在
算法导论
一书中却是从插入排序开始讨论,其实现思路类似于整理纸牌的过程。
我是一只熊猫
·
2020-08-18 22:43
算法导论python
《
算法导论
》第三版第13章 红黑树 练习&思考题 个人答案
13.1红黑树的性质13.1-1解:完全二叉搜索树:黑高为2的红黑树:黑高为3的红黑树:黑高为4的红黑树:13.1-2解:如果标红,不满足性质4,因为35是36的父结点,也是红色;如果标黑,不满足性质5,该条路径黑高超过其他路径。13.1-3解:可以验证所得到的树仍然满足5个条件,所以是红黑树。13.1-4解:(1)如果“吸收”前两个子结点都已经是黑色了,度为2;(2)如果“吸收”前两个子结点一个
张劲声
·
2020-08-18 22:00
算法
通过深度优先算法进行拓扑排序(
算法导论
)
通过深度优先算法进行拓扑排序(Java)packagegraph;//拓扑排序用深度优先算法实现importjava.io.IOException;importjava.util.Scanner;importjava.util.Stack;publicclassTopological{privateclassENode{intivex;//该边所指向的顶点的位置ENodenextEdge;//指向
shitiezhu
·
2020-08-18 22:32
算法导论
leetcode题解——53. Maximum Subarray
解法一(分治策略)思路:我首先想到的是
算法导论
分治策略一章给出的解法:假设我们要寻找数组A[left,right]中的最大子数组,分治策略要求我们把问题分解两个规模相当的子数组,也就是说要找的子数组的中心
GeneralSandman
·
2020-08-18 21:53
leetcode
算法导论
红黑树(附带黑高度)
#include#include#defineRED1#defineBLACK0typedefstructRBTreeNode{intkey;intcolor;RBTreeNode*p;RBTreeNode*left;RBTreeNode*right;}RBT,*pRBT;pRBTnil=(pRBT)malloc(sizeof(RBT));intbh=0;voidinitNil(){nil->ke
万万岁
·
2020-08-18 21:28
算法导论
《
算法导论
》红黑树详解(二):Java实现Demo
《
算法导论
》红黑树详解(一):概念《
算法导论
》红黑树详解(二):Java实现Demo使用Java简单地实现红黑树,代码如下:/***红黑树实现demo*/publicclassRedBlackTree>
轻轻的仰望
·
2020-08-18 20:16
数据结构与算法
Java
上一页
15
16
17
18
19
20
21
22
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他