我对迪杰斯特拉算法的理解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ANDRIODTH/article/details/66685482

       Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,理解  Dijkstra(迪杰斯特拉)算法是很必要的,对以后的成长很有帮助,特左此文以作笔记,方便复习。 

  算法描述:

     基本思想:设G(u,v)是加权图,将G上的点分为两组,第一组为集合S(初始只有一个点,即源点,其他点陆续按路径由到长及相邻关系往里加入),第二组为其余未确定最短路径的顶点集合(用U表示,按最短路径长度的递增次序依次把第二组的顶点加入S中,,直到u为空,则算法结束)。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。

例子:



步骤                        集合S 集合u
             1                              算法开始,选入u0                                                  u1-u7        
            2 比较u0到u1-u7的距离,
u0->u1=2
u0->u2=1
u0->u3=8
u0->u4=00(00表示无穷,下同)
u0->u5=00
u0->u6=00
u0->u7=00
选入u2,S=(u0,u2),
路径:u0->u2
           u0
选择路径: u0->u2
u1,u3-u7
            3 比较u0,u0->u2到u1-u9的距离,
u0->u1=2
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=10
u0->u2->u7=00

选入u1,S=(u0,u1,u2),
路径:u0->u1
    u0->u2
            u0
选择路径: u0->u1
u3-u7
            4 比较u0、u0->u1、u0->u2到集合u的各点之间的距离,
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u1->u3=10
u0->u1->u4=3
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00


u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=10
u0->u2->u7=00
选入u4,s=(u0,u1,u2,u4)
路径:u0->u1->u4
             u0->u1
            u0->u2
选择路径:u0->u1->u4
u5-u7、u3
            5 比较u0、u0->u1、u0->u2、u0->u1->u4到集合u的各点之间的距离,
u0->u1=2
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u1->u3=8
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00

u0->u1->u4->u5=6
u0->u1->u4->u6=00
u0->u1->u4->u7=12

u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=11
u0->u2->u7=00
选入u5,s=(u0,u1,u2,u4,u5)
路径:u0->u1->u4->u5
            u0->u1->u4
            u0->u2
            u0->u1
           u0
选择路径:u0->u1->u4->u5
u6-u7、u3
            6 比较u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5到集合u的各点之间的距离,

u0->u3=8
u0->u6=00
u0->u7=00

u0->u1->u3=8
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00


u0->u1->u4->u6=00
u0->u1->u4->u7=12

u0->u1->u4->u5->u6=7
u0->u1->u4->u5->u7=9

u0->u2->u3=7
u0->u2->u6=9
u0->u2->u7=00
选入u6,s=(u0,u1,u2,u4,u5,u6)
路径:u0->u1->u4->u5->u6
            u0->u1->u4->u5
            u0->u1->u4
            u0->u2
选择路径:u0->u1->u4->u5->u6
u7、u3
           7 比较u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5、u0->u1->u4->u5->u6到集合u的各点之间的距离,
u0->u3=8
u0->u7=00

u0->u1->u3=8
u0->u1->u7=00

u0->u1->u4->u3=8
u0->u1->u4->u7=12

u0->u1->u4->u5->u3=7
u0->u1->u4->u5->u7=12

u0->u1->u4->u5->u6->u3=12
u0->u1->u4->u5->u6->u7=13

u0->u2->u3=7
u0->u2->u7=00
选入u3,s=(u0,u1,u2,u4,u5,u6,u3)
路径:
    u0->u1->u4->u5->u6
            u0->u1->u4->u5->u3
            u0->u1->u4->u5
            u0->u1->u4
            u0->u2->u3
            u0->u2
            u0
选择路径:  u0->u1->u4->u5->u3
                      u0->u2->u3
u7
            8  比较
u0->u1->u4->u5->u6、
u0->u1->u4->u5->u3、 
u0->u1->u4->u5、
u0->u1->u4
u0->u2->u3
u0->u2
u0到集合u的各点之间的距离,
u0->u7=00
u0->u2->u7=00
u0->u2->u3->u7=00
u0->u1->u4->u7=12
u0->u1->u4->u5->u7=12
u0->u1->u4->u5->u3->u7=00
u0->u1->u4->u5->u6->u7=13
选入u7,s=(u0,u1,u2,u4,u5,u6,u3 ,u7)
路径:
    u0->u1->u4->u5->u6->u7
            u0->u1->u4->u5->u3->u7
            u0->u1->u4->u5->u7
            u0->u1->u4->u7
            u0->u2->u3->u7
            u0->u2->u7
            u0->u7
            u0
选择路径:  u0->u1->u4->u7
                       u0->u1->u4->u5->u7
空(算法结束)

选出最短路径:u0->u1->u4->u7、u0->u1->u4->u5->u7


以上就是我理解的Dijkstra(迪杰斯特拉)算法的动态过程。(有错误之处,请指正)



展开阅读全文

我对网站优化的理解

03-06

学网络搜索引擎优化(SEO)也有一段时间了,网上关于SEO的学习资料很多,看法也众说纷纭,在此我也谈谈我对SEO的粗浅了解。rnSEO通俗的讲,就是使用google或者baidu搜索某个关键词时,使你的网站排在搜索结果前几页的一种技术,或者一种策略。比如搜索“二手汽车”,你就要想办法使你关于二手汽车转让或者销售的网站,尽可能排在搜索结果的前几页,最好是第一页,这就是SEO。rn影响搜索结果排名的因素很多,网站的访问流量是很关键的一个因素,不错的访问量,再加上选择好的关键词,pr值高的网站做外链,网站从目录到内容整体结构的优化,利于搜索引擎爬虫更好的访问网站,这样做以后,我相信你的排名也就不会差到哪里去了。rn下面谈谈具体的SEO优化的技术:rn一、 关键词的选择。rn网上关于关键词选择的内容很多了,这方面就不多说了,强调一点,我觉得选择关键词rn的时候,可以考虑选择“长尾关键词”。具体的内容,大家可以参考www.seowhy.com这个网站很不错,里面的内容也很多,就是采用长尾优化很成功的一个网站。rnrn二、 关于PR值rn在SEO中很多人过于神话了PR值的重要性,我个人觉得这不完全对。在google中诚rn然将PR值做为搜索结果排名的一个因素,但却绝对不是决定因素。举个简单的例子,我所在公司的网站www.cocpdp.com 的PR值是4,其实没有怎么优化,也没有多少外链,只有一个长虹总公司的外链www.changhong.com他的PR值为6。 PR值为4按理来说流量应该不错了,实际上并不是这样,这个网站很久没有更新,google的爬虫也是10天左右才访问一次,所以在搜索与其相关内容时,它并不会很靠前。rnrn三、 关于外链的选择rn外链的选择很重要,尽量选择PR值高的网站,就像前面所讲的一样,一个高PR值的rn网站,可以将链接的网站的PR值也提高。如果你能跟163、sina、yahoo这些牛B的网站外链上,那么恭喜你,你的PR值肯定不用愁了。当然,这些大公司一般不叼咱们这些小虾米,这时候选择链接的网站,就尽量选取同行业或者相关行业的网站做链接,有一点特别注意不要加入那种链接农场,貌似很多网站可以相互链接,但事实上,只要一个网站被搜索引擎发现有作弊的行为,就会殃及池鱼,你的也就有可能被google或者baidu K掉。新站一般不宜快速进行外链,等被搜索引擎收录后,一般2~3个月,进行外链比较合适。这段时间新站的网上排名很不稳定,或者没有排名,这是很正常的,一般被称为沙盒效应(sandbox),持续rn3个月到半年,排名逐渐就开始稳定下来了。rnrn四、 关于网站结构的优化rn网站整体结构的优化也很重要,很多SEOer过多的沉迷于网站关键词的选择,我认为rn这是不对的。很多搜索引擎对keywords、description标签等已经不在很感“性趣”了。网站整体结构的优化才是王道。首先,是URL的优化,一个清楚的,能表明网站特点的URL当然在用户搜索时,能为其加分的,尤其是英文站。当然现在好的URL,基本上剩的不多了,如果有合适的你就赶快注册吧。其次,是页面代码的优化,很多SEO高手都强调过页面尽量少一点flash或者javascript代码,虽然影响了视觉效果,但确大大加快了搜索引擎爬虫索引网站的速度。如果非要用到flash做菜单,也最好在下面采用静态的方式做个导航条。现在的网站大多采用div+css进行布局,嵌杂着大量的js代码,很多专家建议,单页面的大小最好不要超过100KB,是很有道理的,太大了会影响搜索引擎索引速度。如果代码太多,可以采用一些压缩工具,对页面的代码进行一些优化。有一个不错的javascript压缩器叫做packer(http://dean.edwards.name/packer),大家可以看一下,是国外的一个牛人写的,相当的有才。最后,再把网站上的图片的部分也利用起来,那就是ALT标签的作用了,网上关于这一点,已经说的很多了,我就不老生常谈了。rnrn五、 内容好才是王道rn呵呵,这句话有点像P话,也是实话。一个优秀的SEO从业者能使一部分人发现某个rn网站,但却不能保证他再次访问这个网站。一个优秀的网站策划人员或者叫信息架构师的三个目标就是:使用优化技术使用户找到你的网站,在你的网站上找到他所需要了解的内容,是他对你的网站产生兴趣,并可能经常光顾。在这点上很多大的网站都做的很好,像网易的新闻,尤其是评论部分,有一定的言论自由,很多人热衷于此。CSDN、天涯、百度贴吧等等都做的很好,因为他们很好的考虑了用户的体验度。一句话,优秀的内容,大量的原创,经常的更新,网站的排名和PR值也就自然上去了。rnrn六、 分析优秀的竞争对手rn知己知彼,百战不殆。这句话用在SEO行业同样有效果,搜索一个关键词,然后仔细rn分析排在前5位的网站,你肯定会有很多心得。rnrnSEO行业未来的预测rn要想做好SEO,我个人觉得在网站一开始制做的时候,就要综合考量,就要以易推广性、易发现性、易使用为原则,而不要等什么都弄好了,再进行优化,这时候再对网站结构做调整就是很麻烦了。目前SEO这个行业有点混乱,水平也高低不齐,白帽SEO、黑帽SEO或者两者兼而为之。有些SEOer通过为竞争对手制作恶意镜像站,为竞争对手制作恶意的黑帽链接,挤夸对手,抢得排名。所以,我个人觉得随着大家网站优化意识的加强,专业做SEO的人员,以后机会越来越少了,而且搜索引擎也必然要不断的对网站真正的“价值”,对用户的需求,有一个较为可靠的判断。如果搜索引擎的技术没有不断的更新,没有越来越人工智能,那所有的网站可能就只有通过竟价取得优先排名了。rnrn以上内容,全是一家之言,欢迎广大高手对其进行批评指正。rn在下博客地址:blog.csdn.net/huanghaigoodrnrn 论坛

我对抽象的理解

11-27

新人一个,学java两个多月了,说说我对抽象的理解。rn假设电脑系统坏了,那么我们脑中首先想的就是解决方法,这时脑中想的解决方法就是抽象的如:rnclass 装系统rnrn public abstract void 修电脑方法_U盘();rn public abstract void 修电脑方法_光盘();rn public abstract void 修电脑方法_ghost镜像();rnrnrn如上我们想到了三种安装系统的方法,一种是需要系统光盘,一种是需要一个做成启动项的U盘,并且里面有win7的镜像,一种是需要电脑中非系统盘符内写有win7系统的镜像,并且电脑内有一键ghost; 那么我们开始找所需要的装系统工具,目前找到的工具只有一个U盘,U盘内与上述符合,那么开始用U盘装系统。代码如下:rnclass U盘装系统 extends 装系统rnrn public abstract void 修电脑方法_U盘()rn rn 将U盘插入电脑;rn 找到镜像装系统;rn 安装完毕;rn rnrnrn如上所写:我认为抽象放到现实生活就是,发生了一些问题需要你解决,你当时想的解决方法就是抽象到,当你按照你脑中那个方法做的时候就等于将抽象方法实现了,再举个例子:你的电脑坏了需要修理,你心里就想到了解决方法(abstract),然后你就用想到的方法去修理(实现)。rn其实人就是一个抽象与实现的个体,如果发生一件事,你自己能解决就等于你自己把抽象方法实现了。如果自己解决不了就找到其他实现了此类抽象方法的人。rn还拿修电脑说事:rnclass 张三rnrn public void 吃饭;rn public void 喝水;rnrnclass 张三的电脑 rnrn //张三没有这功能所以rn public abstract void 修理();rn rnrnclass 修电脑的 extends 张三的电脑rnrn rn public abstract void 找到毛病修理()rn rn rn 电脑 r=修理();rn rn private 电脑 修理 ()rn rn 修理完毕();rn return 修完的电脑;rn rnrn请大神点评理解的对不对,至于代码小小得了 论坛

理解的对么?

01-05

directshow播放顺序rn我在网上看了些帖子,但是和我理解的存在点疑问,来这里问问。rn我的理解是这样:rn1)rnrnhr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, rn IID_IGraphBuilder, (void **)&pGraph);rn//hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,rn//IID_IMediaControl, (void **)&pMC);rn//以上两句只是通过不同的方式来来获取FilterGraph 并且 可以通过IID_IGraphBuilder IID_IMediaControl 互相获取对方!也可以获取其他借口只是要遵循下面的规则:rnrnrnhr = pMC->QueryInterface(IID_IGraphBuilder, (void **)&pGraph);rnhr = pGraph->RenderFile(lpszMovie, NULL);//是不是这句要传给filer graph视频 然后只用这句调用完成之后才会 有真正的内容在filer graph(类似于实例化一个对象)rn//然后才可以通过pGraph 获取其他借口 ,对视频的控制才有效果rn//总结是就是pGraph->RenderFile 必须先于pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);rn//pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);rn//pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);rn//pGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);rn//调用才会有用,打破了这个顺序就会出错。rnrnrnpGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);rnpGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);//pMC->QueryInterface(IID_IMediaEventEx, (void **)&pME); 这两句是一样的rnpGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);rnpGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);rnpGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);rnpGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);rnrnhr = pControl->Run();rnhr = pEvent->WaitForCompletion(INFINITE, &evCode);//调用这这句会发生阻塞,等待视频播放完成rn//如果我这时候调用pMediaPos->put_CurrentPosition();的会产生中断,处理这个设置当前视频的位置rnrnrnrn忘指正!谢谢rn 论坛

没有更多推荐了,返回首页