1. 程式人生 > >java專案——大資料量的處理 標籤: 大資料記憶體儲存

java專案——大資料量的處理 標籤: 大資料記憶體儲存

15. 最大間隙問題 
給定n個實數 ,求著n個實數在實軸上向量2個數之間的最大差值,要求線性的時間演算法。 
方案1:最先想到的方法就是先對這n個數據進行排序,然後一遍掃描即可確定相鄰的最大間隙。但該方法不能滿足線性時間的要求。故採取如下方法: 
s 找到n個數據中最大和最小資料max和min。 
s 用n-2個點等分割槽間[min, max],即將[min, max]等分為n-1個區間(前閉後開區間),將這些區間看作桶,編號為 ,且桶 的上界和桶i+1的下屆相同,即每個桶的大小相同。每個桶的大小為: 。實際上,這些桶的邊界構成了一個等差數列(首項為min,公差為 ),且認為將min放入第一個桶,將max放入第n-1個桶。 
s 將n個數放入n-1個桶中:將每個元素 分配到某個桶(編號為index),其中 ,並求出分到每個桶的最大最小資料。 
s 最大間隙:除最大最小資料max和min以外的n-2個數據放入n-1個桶中,由抽屜原理可知至少有一個桶是空的,又因為每個桶的大小相同,所以最大間隙 不會在同一桶中出現,一定是某個桶的上界和氣候某個桶的下界之間隙,且該量筒之間的桶(即便好在該連個便好之間的桶)一定是空桶。也就是說,最大間隙在桶 i的上界和桶j的下界之間產生 。一遍掃描即可完成。