insortion_recusion_sort ( a , n ) //a[1..n]
if n > 2 //陣列元素在2個以上時將陣列進行拆分……………………………………………………c1
insortion_recusion_sort ( a , n - 1 ) //將前 n - 1位進行插入排序……………………c2
key = a [ n ] //將陣列中的最後一位設為待比較值key………………………………………………c3
i = n - 1 //要比較的陣列元素為n-1個………………………………………………………………c4
while i > 0 and a [ i ] > key //當標誌位沒到陣列左盡頭,且第a [ i ]比a [ n ](key)大時…………c5
a [ i + 1 ] = a [ i ] //a [ i ]移動到a [ i +1 ]的位置,當前值右移一位………………………………c6
i = i - 1 //標誌位左移一位……………………………………………………………………………c7
a [ i + 1 ] = key…………………………………………………………………………………………c8
//比較完畢後,最後乙個a [ i ]的位置因為與a [ i +1]交換了,所以是空出來的,這個位置掃塌而待在空中與各個a [ i ]做比較的a[ n ]的值key,a[ n ]從一開始失去了位置,到最後它的值終於在所有比它大的a[ i ]之前的位置安了家。並完成了從小到大的排序。ps:因為最後一步有個 i = i - 1 ,所以是a [ i + 1 ] = key,而不是a [ i ] = key。
首先,題目讓我們考慮最差的情況,即a[1..n]是從大到小排序的,偽**第6行while中的每一次交換都不能省,且都要交換到i=0結束。
先考慮t(n)的情況,設在每個函式中while迴圈一共要執行ti次。
t(n)=c1+c2+c3+c4+ti*c5+(ti-1)*(c6+c7)+c8+t(n-1)
t(n)=(c5+c6+c7)*ti+c1+c2+c3+c4-c6-c7+c8+t(n-1)
因為c1~8都是常數,複雜度都為o(1),不妨設k1=c5+c6+c7,k2=c1+c2+c3+c4-c6-c7+c8。
則,t(n)=k1*ti+k2+t(n-1)
當n=n時其中c5處,想想最後乙個元素(最小數)待排序的情況,前面的每個數都比它大,即要完成(n-1)次比較,算上最後i=0結束迴圈那次,一共ti=(n-1)+1=n。
t(n)=n*k1+k2+t(n-1),同理,
t(n-1)=(n-1)*k1+k2+t(n-2),
t(n-3)=(n-3)*k1+k2+t(n-3),
t(3)=3*k1+k2+t(2),
t(2)=2*k1+k2.
最後我們來驗證一下t(2)的值。考慮遞迴結束時,即n=2時,
直觀地,
t(2)=c1+c3+c4+2*c5+c6+c7+c8,我們將k1=c5+c6+c7,k2=c1+c2+c3+c4-c6-c7+c8代入原式,可得
t(2)=2*k1+k2。
驗證無誤。
將t(2)到t(n-1)依次代入上一級呼叫。
顯然,t(n)=(2+3+4+……+(n-1)+n)*k1+n*k2,
t(n)=0.5*k1*n*n+(0.5*k1+k2)*n-k1-k2.
其中k1,k2均為常數,
故迭代插入排序演算法的時間複雜度為o(n^2)。
遙操作機械人解決方案
遠端機械人技術可用於遠端醫療 遠端超聲診斷 5g遠端機械人 機械人遙操作 遠端救災等領域 遙操作機械人技術可應用於遠端醫療 遠端診斷 遠端抓取 空間探測 危險環境 核放射 有毒化工 易燃易爆 病毒傳染 作業等領域。相對於 機器換人 遙操作機械人體現的是 機器幫人 它能夠讓操作者以自然可控的方式實時操...
打造個人雲資料生活解決方案示例
範圍 我這裡說的個人雲資料生活主要是最基本的幾個方面 舉個例子,我在手機上新增了乙個聯絡人,我的其他裝置上的聯絡人也很快新增了這個聯絡人 我在pc上對某個文件進行了修改,其他裝置上的此文件也馬上同步了 當我沒有帶任何裝置,我還可以登入網頁檢視 編輯我的資料。拿我自己當前的實際情況來示例,目前我的裝置...
音訊指紋的演算法 飛利浦解決方案
這個音訊指紋暫時用來做同源音訊聚類,判斷歌曲是否是同一源的,這裡先介紹下飛利浦的方案 a highly robust audio fingerprinting system,這個演算法是在他上面的優化,幀 一段固定時間的音訊資訊,ts 相鄰兩個幀 兩個幀重疊時間域為 31 32,通過能量差分的關係,...