海量資料庫的應用,如國家的人口管理系統,戶籍檔案管理系統,在這樣的海量資料庫應用中,資料庫的儲存設計和結構優化(如索引優化)、資料庫的查詢優化及分頁演算法尤為重要!
隨著網際網路的日益普及,海量資訊的增長,網格運算的到來,海量資料儲存產品和海量資料儲存技術方案的需求更為市場所需。
同時,實際的海量資料處理,更是涉及很多細節,包括海量資料儲存(物理儲存、邏輯儲存、海量資料庫的備份)、資料採集、海量資料查詢(海量資料分頁、海量資料排序)、海量資料安全和管理等。
google和baidu,人家的資料量在那裡擺著,他們的命題思路很明確,不要求具體語言,只要求程式的效率和可行性,題目大多數是關於海量資料搜尋的演算法問題。
2、有一篇英文文章(也就是說每個單詞之間由空格分隔),請找出「csdn」著個單詞出現的次數,要求效率最高,並寫出演算法的時間級。
peak wong的海量資料搜尋演算法題解
~~~~~~~~~~~~~
其實占用記憶體不算大, 可以接受. 呵呵.
既然不可以一次讀入記憶體, 那可以這麼試試:
方法1: 讀出100w個資料, 找出最大的1w個, 如果這100w資料選擇夠理想, 那麼以這1w個資料裡面最小的為基準, 可以過濾掉1億資料裡面99%的資料, 最後就再一次在剩下的100w(1%)裡面找出最大的1w個咯~~
方法2: 分塊, 比如100w乙個塊, 找出最大1w個, 一次下來就剩下100w資料需要找出1w個了.(注意消重,這剩下的100w個資料應該是互不相同的。即每找出乙個塊裡最大的1w個,就應該hash儲存。下乙個塊中若出現了已儲存的資料,則不計在此塊的top 1w裡,這樣才能保證最終剩下的100w裡面尋找top 1w就接近1億裡面的top 1w。想想:如果每個塊的top 1w都基本是重複的,不消重的話,最終的結果有可能就少於1w個。)
對於上面提到的找出100w個資料裡面最大的1w個, 說起來比較羅嗦, 還是說說找到第1w個大的數字的方法:
用快速排序的方法, 分2堆, 如果大的那堆個數n大於1w個, 繼續對大堆快速排序一次分成2堆, 如果大堆個數n小於1w, 就在小的那堆裡面快速排序一次, 找第10000-n大的數字; 遞迴以上過程, 就可以找到第1w大的數. 據說也是stl的search_n()的方法;(更好的一種類似的方法是將這些數以5個為一組,每組通過插入排序找出其中位數,再找出其中位數的中位數,依次遞迴,找出最終乙個中位數x,然後按照x對序列進行快排,且設x是序列的第k大的數,如果要找的是第i大的數,則比較k與i的關係,如果相等,直接返回x,否則如果k>i,則在小的那堆裡面繼續按照這種方式快排,如果k26,且32 = 1<<5,利用移位操作使得效率大大提高,不需要再按位比較字串,通過移位之後比較兩英文單詞所對映得到的整數值即可(比較一次)。
A 搜尋演算法
啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...
A 搜尋演算法
a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...
搜尋演算法小結
搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題的部分和所有的可能情況,從而求出問題的解的一種方法。常用的搜尋演算法有 一.回溯法 回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種 走不通就掉頭 思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最...