选择最有效的数据结构

时间:2014-12-24 02:47:01

标签: python

我没有CS背景,经常遇到以下问题。我有一个包含以下内容的文本文件:

abacial;abadengo;monástico;monacal;clerical;eclesiástico
abacora;avasalla;somete;sojuzga;supedita;rinde;acosa;hostiga
abacorar;acosar;acometer;sujetar
abacá;cabuya;cáñamo;fibra;filamento;pita

同一行中的所有单词都是同义词。我想在数据结构中加载它,以便查找给定单词的同义词是有效的。例如,给出查询:

'abadengo'

它应该在第一行找到它并返回剩余的单词:

['abacial', 'monástico', 'monacal', 'clerical', 'eclesiástico']

我不需要工作代码,我只暗示如何有效地完成这项工作。对我来说唯一的想法是创建一个dict,每个单词作为键,一个列表,同义词作为值,但这似乎是浪费的记忆。我也想过某种图表,但之前从未这样做,也不知道有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

我认为 Roget的词库有两个部分。将每个单词与一个数字(有时是几个数字)和一组编号的同义词列表配对的索引。效率是一个很滑的概念,这种方式节省空间,但需要两次查找才能找到答案。

答案 1 :(得分:0)

为避免浪费内存,请为每个同义词(包括其自身)使用dict录制相同元组(元组比列表更高的内存效率),然后查找使用删除重复的功能很少。即:

syndict = {}
with open('the_file', 'r') as f:
    for line in f:
        syns = tuple(line.strip().split(';')(
        for word in syns:
            syndict[word] = syns
def lookup(word):
    syns = syndict.get(word, ())
    return [w for w in syns if w!=word]