[1] 演算法之路,演算法之路

來源:互聯網
上載者:User

[1] 演算法之路,演算法之路

選擇排序 – 演算法

1. 將要排序的對象分作2部份,一個是已排序的,一個是未排序的

2.  從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個

e.g:

排序前:70 80 31 37 10 1 48 60 33 80


[1] 80 31 37 10 7048 60 33 80 選出最小值1

[1 10] 31 37 80 7048 60 33 80 選出最小值10

[1 10 31] 37 80 7048 60 33 80 選出最小值31

[1 10 31 33] 80 7048 60 37 80 ......

[1 10 31 33 37] 7048 60 80 80 ......

[1 10 31 33 37 48]70 60 80 80 ......

[1 10 31 33 37 4860] 70 80 80 ......

[1 10 31 33 37 4860 70] 80 80 ......

[1 10 31 33 37 4860 70 80] 80 ...... 


#define SWAPER(X,Y){int t;t=X;X=Y;Y=t;}選擇排序 – 程式片段:int SelectionSort(int a[],int lens){int i,j,k;for(i=0;i<lens;i++){int minIndex = i;for(j=i+1;j<lens;j++){if(a[minIndex]>a[j]){minIndex=j;}}if(i!=minIndex) SWAPER(a[i],a[minIndex]);}return 0;}int SelectionSort2(int a[],int lens){int i,j,k;for(i=0;i<lens;i++){for(j=i+1;j<lens;j++){if(a[i]<a[j]){SWAPER(a[i],a[j]);}}}return 0;}



本科畢業怎走上演算法之路? 興趣使然,但不知路在何方 經驗人指點一二 謝過

兩點基礎,一是程式設計語言,二是編程技術。
演算法有很多,隨便拿本演算法書來,上面的論題一輩子也學不完。
找個感興趣的課題,最好是結合實際的,前人已經做了部分工作的,繼續研究下去。

短期內不求回報的話,可以把輪子再造一遍。
 
一個最優路徑演算法的思路

同意樓上,最長路徑是NPC問題,不存在多項式演算法。

證明是簡單的:
1、最長無環路問題的判定版本是“給定有向圖D和整數k,問D中是否存在長度大於或等於k的無環路”(這一表述對有權圖和無權圖都有效)。
2、將Hamilton路問題規約到最長無環路問題(的判定版本)是顯然的:輸入一個n頂點的有向圖D,直接問:有向圖D中是否存在長度大於等於n-1的無環路?

簡言之,對任意n頂點的有向圖D,假如能夠D中的找到最長無環路P,那麼就能立即知道D中是否存在Hamilton路(只需看P的長度是否為n-1即可),從而最長無環路問題是NPC。

小規模就直接DFS吧。大規模的時候DFS剪枝。不過確實不好做呀。

有向無圈圖的話可以用dijstra貪心,或者簡單用folyed演算法就可以了(把最小化變為最大化)。

有圈的話您……或者能縮圈嗎?可以考慮。總之比較複雜。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.