2013-07-21 150 views
0

我有一個包含大約30K首歌曲名稱的文件。我必須使用這個列表來自動建立AJAX文本。 一些名稱也以數字開頭。我的問題是我可以在這個列表上進行二進制搜索嗎?如果是,如何?在字符串列表中進行二進制搜索

+0

定義「前綴」「二進制搜索「,請。 您希望結果如何?是一個下拉菜單嗎? – silkfire

+4

使用數據庫...不要試圖用這麼大的文件來做這件事。 – Orangepill

+0

@silkfire是的,它會顯示在谷歌 – silverflash

回答

2

首先排序列表;

假設用戶輸入的第一個字母是「A」;

以高= 0和低=字符串數量-1開頭;

然後,你可以定義一個指數,其中高就是以「A」開頭的,低的是,有一個字符串的第一個索引與「A」開頭的最後一個索引。通過兩個二進制搜索可以實現。

因此,如果輸入的下一個字母是「B」,那麼您在上面定義的高低範圍內進行另一個二分搜索,然後再用兩個二進制搜索再次調整高和低。確保你搜索字符串的高低之間的第二個字符與「B」匹配等:) :)

注意:我建議使用數據庫來這樣做,但正如你所查詢的,如果有任何方式使用二進制搜索,我回答這樣:)

簡單的SQL查詢:SELECT column_name FROM table_name WHERE column_name LIKE 'prefix%'選擇那些字符串開始與存儲在「表名」表列「COLUMN_NAME」

+1

大跌倒在這裏是你必須填充和搜索每個請求30,000元素的數組。 – Orangepill

+0

@Orangepill:我相信該列表已預先填充。並且搜索是二分搜索,所以lg(30,000)<= 16(其中,lg = log2)因此每一步最多會有16 + 16 = 32個比較。 – Fallen

+0

如果我將使用數據庫,每當用戶按下某個鍵時,我都不需要查詢數據庫嗎? – silverflash