超級通俗易懂的演算法實現講解 (一) 歸併排序

2021-09-25 22:50:20 字數 1528 閱讀 5687

對於歸併排序,我們收到的任務很明確:

就是對一組無序(當然也有可能有序啦)的不明是否有序的資料進行排序,使這組序列實現從小到大的排列順序,這裡給出一組樣例輸入:

8 5 9 2 6 3 7 1 10 4

我們不妨將序列先放入陣列中

#define max 500 

int n;

int s[max]

;cin>>n;

//先輸入預處理序列的大小

for(

int i=

0;i)//初始化序列(陣列)

好,預處理完畢!

回到歸併排序上,歸併的思想就是分而治之,用遞迴的方法將對整個陣列排序轉化為對陣列的每個部分進行排序,然後再將他們組合起來

首先,我們將陣列先一分為二,憑藉小學出色的奇偶數知識,我們不難這麼挑選奇偶數:偶數就總長度/2,奇數就(長度+1)/2,

if

(n%2==0

)else

那麼我們只需要在奇數情況下丟掉中間數即可,這樣每次劃分(一分為二)之後,得到的都是長度相等的子問題

但是這樣做,在合併的時候就會很困難了emmm

所以我們必須轉換一下思路

通過犧牲等長的代價,通過(left+right)/2的方法選分界點,

分為[left,mid)和[mid,right)兩部分,這樣不管怎麼樣,每次都能縮小問題的規模,知道最後mergesort只用處理乙個數(ps:left=right),停止分割,

void

mergesort

(int a,

int left,

int right)

}

下面就來考慮合併的問題

void

merge

(int a,

int left,

int mid,

int right)

//此處先跳過不看

r[size_l]

=100

;//分界線

for(

int j =

0; j < size_r; j++

) l[size_r]

=100

;int i =0;

int j =0;

for(

int cnt = left; cnt < right; cnt++

)//對照著拿出來的兩塊分組

//左右比較,乙個個放入

else

}}

ok

這樣我就可以交差了!

那麼,我們為什麼要用歸併排序呢?

那是因為,這樣每次一分為二,規模為n的排序問題

只需要經過log(以2為底)n次就能分割完。

由於每一次的合併(merge)總共需要比較n次

所以總的時間複雜度(所有情況下)均為o(nlgn)

優於快速排序的最壞情況o(n^2)

通俗易懂的講解Softmax

s of tmax softmax softma x是機器學習中很重要的分類函式。通常位於神經網路的最後一層,它的作用是將前面輸出層的資料轉換為概率分布,這個概率分布的特點就是 任意事件發生的概率在0 1之間,且所有事件發生的概率總和為1,並且總有乙個事件會發生。假設原始的神經網路輸出為y1,y2....

通俗易懂 SVM演算法講解 演算法 案例

1.3最大間隔分類器 1.4後續問題 1.5新聞分類例項 尋覓網際網路,少有機器學習通俗易懂之演算法講解 案例等,專案立於這一問題之上,整理乙份基本演算法講解 案例於文件,供大家學習之。通俗易懂之文章亦不可以面概全,但凡有不正確或爭議之處,望告知,自當不吝賜教!github位址 加資料 首先我們先來...

通俗易懂 SVM演算法講解 演算法 案例

新聞分類案例 首先我們先來看乙個3維的平面方程 ax by cz d 0 這就是我們中學所學的,從這個方程我們可以推導出二維空間的一條直線 ax by d 0 那麼,依次類推,更高維的空間叫做乙個超平面 x代表的是乙個向量,接下來我們看下二維空間的幾何表示 svm的目標是找到乙個超平面,這個超平面能...