利用上述此題來進行驗證,**如下:
#include#include#include#include#include#includeusing namespace std;
const int block_size = 5;
int findkth(vector&,int,int,int);
int insert_sort(vector&arr, int start, int end)
vectorpush_medians(vector&arr, int start, int end)
if(extra)
return medians;
}int find_median(vector&arr,int start,int end)
int findkth(vector&arr,int start,int end,int k)
stack> stk;
stk.push(make_pair(start,end));
while(!stk.empty())else
}int small = start - 1;
for(int i = start; i < end; i++)}}
}int main(int argc, char* argv)
cout<
摘自:總體意思就是:
每次進行median of median操作的時候都可以保證可以最少去掉30%的資料,
結論得來的不等式如下:
不等式的含義是對於長度為n的陣列,那麼其至少得有n/5個子陣列(每個陣列的長度理論上均為5),然後你考慮比median of median大的數的數量的最小值
顯然至少要有1/2 * (n/5)個子陣列有比median of median大的數,其中每個子陣列裡頭比median of median大的數至少得有三個,除了兩個子陣列以外,
這兩個子陣列分別為median of median所在的子陣列本身以及長度不及5的子陣列,因此就得到了上述不等式。
同理可以推出median of median小的數的數量的最小值,
因此我們可以推出以下不等式,第一項是計算median of median的時間複雜度,第二項為計算剩餘數字的時間複雜度,第三項是當前輪的時間複雜度
最壞情況下保證時間複雜度為N logN的快速排序
快速排序的平均時間複雜度是n logn,同時其也是實踐已知的最快的通用排序演算法,但是其最壞情況的時間複雜度依然是n的平方,但是只要我們對快速排序演算法稍作修改,就可以保證其最壞情況的時間複雜度也是n logn。思路就是在遞迴達到一定深度後,將快速排序的遞迴呼叫改為堆排序,下面是我實現的 我將遞迴深...
非root情況下安裝mysql
由於沒有root許可權,不想使用root使用者安裝在系統中的mysql,今天打算在伺服器自己的個人目錄裡安裝mysql。找到了乙個非root使用者安裝的方法,按步驟做下來還是踩了不少坑,由此記錄一下。參考 linux下非root許可權安裝mysql tar zvxf tar.gz 解壓縮 cd 進入...
什麼情況下用遞迴?
遞迴的特點,可以看出遞迴可以大大縮短程式的 有意識的使用遞迴,可以用較短的 解決一些複雜的問題。甚至有些問題非得使用遞迴解決不可。那麼什麼時候我們該使用遞迴呢?遞迴演算法的 基本思想 是 把規模大的 較難解決的問題變成規模較小的 易解決的同一問題。規模較小的問題又變成規模更小的問題,並且小到一定程度...