2013-05-14 62 views
0

我正在研究CSCI Capstone,專注於通過聖經進行文本搜索,並且由於我的程序性質,我正在返回格式如下的經文引用的無序列表:「nameOfBook chapNum:verseNum」 。Sorting Scripture References

當我得到引用列表後,我需要按照這個順序對所有三個字段進行排序:名稱,章節和詩句,我希望避免使用O(n^3)算法。我已經有了代碼,可以對書名上的每個參考進行排序,這是O(n),但我不知道該從哪裏去......

建議?

編輯:我正在Java中使用數組,並且正在考慮將已排序的數據存儲到稍後可以訪問的文本文件中。

+0

你想使用什麼編程語言?你會將數據存儲在數據庫中,寫入文本文件還是隻顯示它? – steveha 2013-05-14 17:29:54

+0

你需要進一步解釋你的問題。就目前來看,這沒有幫助。 – christopher 2013-05-14 17:31:24

+0

我正在Java中使用數組。聖經引用被存儲爲字符串,最終將被保存到文本文件中,以後將用作參考 – 2013-05-14 17:48:14

回答

0

如果您只是想按名稱,章節和詩句進行單一排序,那麼您可以設置一個排序,將所有這三個元素一起用作排序的關鍵字,或者您可以使用「stable排序「,然後按章節排序,然後按名稱排序。

這是Python中的僞代碼。這是真正的Python代碼,除了我沒有定義parse_code(),get_name(),get_chapter()get_verse()

lst = [] 
for x in parse_code(input_file): 
    name = get_name(x) 
    chapter = get_chapter(x) 
    verse = get_verse(x) 
    tup = (name, chapter, verse) 
    lst.append(tup) 

lst.sort() # will automatically do what you want 

當你由一個元組的列表,並且對列表進行排序,巨蟒將整理基於元組的第一個項目,接着是第二個,然後是第三個。另一方面,如果你正在嘗試構建三個不同的索引,也許最簡單的實現就是將數據存儲在數據庫中,並在每個名稱,章節和詩句上放置一個索引。你可以使用SQLite作爲數據庫;對於聖經中文本大小的項目,我認爲它會奏效。

+0

要使用此代碼對書籍進行正規排序,而不是按字母順序排序,您需要指定「密鑰'sort'方法的參數。 [本頁](http://docs.python.org/2/howto/sorting.html#the-old-way-using-the-cmp-parameter)應該對獲得詳細信息有所幫助。 – chepner 2013-05-14 17:49:59

+0

是的,當我說它會「做你想做的事」時,我假設它是按字母排序的。 – steveha 2013-05-14 18:03:54

+0

我正在尋找聖經的順序,所以正常排序,正如chepner上面建議的 – 2013-05-14 18:04:47