最长递增子序列_python_算法与数据结构
???? 周末了,實(shí)驗(yàn)室的網(wǎng)速還是不給力啊,不知道doctors都在干啥,,,最近都在做算法作業(yè),昨天晚上看了一部電影《將愛進(jìn)行到底》,剛打開電影沒多久就聽到了很熟悉的旋律,讓我很是驚訝,這竟然就是電視版的那首主旋律,十幾年過去了,徐靜蕾?gòu)某醭雒]到現(xiàn)在成為了老徐,我也從黃毛丫頭到現(xiàn)在成為了男子漢,浮生若夢(mèng),歲月流沙。將愛電影的主題曲《因?yàn)閻矍椤泛芎寐?#xff0c;王菲的聲音空靈虛無縹緲,與陳奕迅共同演繹了一首溫馨甜蜜的歌曲。
??? 言歸正傳,到算法上來了,最長(zhǎng)遞增子序列問題在這里不再啰嗦了,不懂的自己baidu去,不過我更喜歡google,呵呵。個(gè)人的愛好吧。
??? 最長(zhǎng)遞增子序列有兩種解法,一種是借助前面的LCS算法,另外是本文要寫的另外一種方法。
?? 1.LCS
????? LCS算法比較的是任意兩個(gè)序列的最長(zhǎng)公共子序列,在最長(zhǎng)遞增子序列中,我們將原序列A首先升序排列得到B,然后將A和B求LCS就可以達(dá)到目的。在這里不再贅述,有關(guān)LCS算法,可以參見前面的文章。
?? 2.網(wǎng)上流傳兩種版本的最長(zhǎng)遞增子序列算法,http://hi.baidu.com/newmyl/blog/item/12f15e97ac88b06854fb965d.html連接對(duì)這個(gè)算法進(jìn)行了深入的分析。我個(gè)人比較贊同http://www.felix021.com/blog/read.php?1587&guid=5的分析(http://blog.csdn.net/fisher_jiang/archive/2008/05/13/2442348.aspx也對(duì)這個(gè)算法進(jìn)行了分析但是本人覺得比較晦澀難懂,C++STL我不習(xí)慣,高手自己揣摩吧~~~~),摘錄如下:
| 假設(shè)存在一個(gè)序列d[1..9] = 2 1 5 3 6 4 8 9 7,可以看出來它的LIS長(zhǎng)度為5。 |
個(gè)人覺得他的分析十分清晰明了,真正能讓我們知道動(dòng)態(tài)規(guī)劃算法的過程。按照這種思路,我實(shí)現(xiàn)了Python版本的LIS算法:
#最長(zhǎng)單調(diào)遞增子序列 def LIS(B, d, n):left = right = mid = len = 1B[0] = d[0] # //從0開始計(jì)數(shù)for i in range(1, n):left = 0right = lenwhile(left <= right):mid = (left + right) // 2if(B[mid] < d[i]):left = mid + 1 #二分查找d[i]的插入位置else:right = mid - 1B[left] = d[i] #插入if(left > len) :len = len +1 #更新lengthreturn lenif '__name__ = __main__' :d = [2 , 1 , 5 , 3 , 6, 4, 8, 9, 7] B=[0]*len(d) #初始化B數(shù)組print(LIS(B, d, len(d))) ?輸出結(jié)果:
| Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on CHENX, Threaded |
posted on 2011-03-20 22:16 追求卓越 挑戰(zhàn)極限 閱讀(...) 評(píng)論(...) 編輯 收藏
刷新評(píng)論刷新頁面返回頂部導(dǎo)航
- 博客園
- 首頁
- 新隨筆
- 聯(lián)系
- 訂閱
- 管理
統(tǒng)計(jì)
- 隨筆 - 27
- 文章 - 0
- 評(píng)論 - 21
- 引用 - 0
公告
轉(zhuǎn)載于:https://www.cnblogs.com/ChenxofHit/archive/2011/03/20/1989760.html
總結(jié)
以上是生活随笔為你收集整理的最长递增子序列_python_算法与数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄联盟帮忙取情侣名,暖心的那种,不要非
- 下一篇: python烟花表白_python炫酷烟