vlambda博客
学习文章列表

随记+算法之贪心算法2

话唠唠写在前面,在度假的时候也不会忘记分享哦,此刻我在浙江宁海温泉大酒店中,趁着午睡时分,赶紧发个定时,所以锅碗瓢盆们,凌晨你们就会看到我现在的分享啦啦~~~

今日份出发前早餐



随记+算法之贪心算法2

有点在日本的感觉~~~


随记+算法之贪心算法2

今日午餐,实话说没吃饱,像去吃婚宴,哈哈哈,不过和小伙伴们还是很开心。


应该写在前面的--------------------------------------------------

我上周五的时候,办公电脑丢了!!!18点丢的,21点才想起来,猪猪说我玩心太重,我决定以后要瞻前顾后,这个缺点要改正,幸亏我遇到了一个好的滴滴司机师傅,滴滴平台真的垃圾的要命,中间的曲折说来话长,我已经预想到丢电脑之后疯狂补项目了。。。。多亏我在我的日志里写了我的姓名和手机号,师傅直接联系我了,在此纪念那晚我和盆友们的惨痛经历。谢谢司机师傅~~~~


步入正文,我要开始写今天的主题了

贪心算法结合(二)——马踏棋盘

将马放到国际象棋的8*8棋盘上的任意指定方格中,按照的走棋规则将进行移动,要求每个方格进入且只进入一次,走遍棋盘上的64个方格,将数字1,2,3…,64依次填入一个8*8的方阵。马在国际象棋中的走法如右图所示。


涉及的计算思维

解决这个问题可以利用到计算机中的一种方法是深度优先搜索,也就是回溯法,体现了计算思维的递归思想。

解决方案

方案一 —— 深度优先搜索法

我们可以采用深度优先法求解,深度优先搜索是指对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。如图1所示,当马在当前位置时(节点1),将它下一跳的所有位置看作分支结点,然后选择一个分支结点进行移动,如节点2,然后再走该结点的分支结点,如节点3,如果节点3不能再走下去,则退回到节点2,再选择另一种走法,如节点4,一直走下去,直至不能派生出其他的分支结点,也就是走不通了。此时则需要返回上一层结点,顺着该结点的下一条路径进行深度优先搜索下去,直至马把棋盘走遍。


方案二 —— 贪心法

贪心法是指,在对问题求解时总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,该方法所做出的仅是在某种意义上的局部最优解。我们在回溯法的基础上,用贪心法进行优化,在每个结点对其子结点进行选取时,优先选择出口最少的进行搜索出口的意思是在这些子结点中它们的可行子结点的个数,也就是孙子结点越少的越优先跳,因为这样选择时出口少的结点会越来越少,这样跳成功的机会就更大一些。(传说中的先苦后甜??)实际体现就是,先沿着周边跳,逐渐向中间靠拢。


写在最后


这是我之前讲过的一个算法,只是用于回顾,我今天在坐地铁的时候迸发了一个想法,5号线转1号线时,等待的时间很短只有1-2分钟,这应该就是整个地铁线的时间优化算法,使得乘客转乘的时候,等待时间最短。真是nice!不过我觉得杭州的红绿灯要改改了,每次都要跑着过去,时间才刚刚好,欺负老年人嘛。

END