我正在研究CSCI Capstone,专注于通过圣经进行文本搜索,并且由于我的程序的性质,我返回了一个无序的经文参考列表,其格式如下:“nameOfBook chapNum:verseNum”。
获得引用列表后,我需要按顺序对所有三个字段进行排序:name,chapter和verse,我希望避免使用O(n ^ 3)算法。我已经有代码对书名上的每个引用进行排序,这是O(n),但我真的不知道从哪里开始......
建议?
编辑:我正在使用Arrays处理Java,并且正在考虑将已排序的数据存储到稍后可以访问的文本文件中。
答案 0 :(得分:0)
如果您只想按名称,章节和经文进行单一排序,那么您可以设置一个排序,将所有这三个项目一起用作排序键,或者您可以使用“稳定排序” “按经文排序,然后按章节排序,然后按名称排序。
这是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
当你有一个由元组组成的列表,并对列表进行排序时,Python将根据元组中的第一项进行排序,然后是第二项,接着是第三项。
另一方面,如果您尝试构建三个不同的索引,最简单的实现可能是将数据存储在数据库中,并在名称,章节和诗句中添加索引。您可以将SQLite用于数据库;对于一个项目来说,圣经中文本的大小我觉得它会很好用。