【问题标题】:complexity of constructing an inverted index list构建倒排索引列表的复杂度
【发布时间】:2012-08-30 22:22:38
【问题描述】:

给定n 字符串S1, S2, ..., Sn,和一个字母集A={a_1,a_2,....,a_m}。假设每个字符串中的字母都是不同的。现在我想为每个a_i (i=1,2...,m) 创建一个倒排索引。我的倒排索引也有一些特别之处:A 中的字母按某种顺序排列,如果倒排索引中 a_i 包含一个字符串(比如S_2),那么a_j (j=i+1,i+2,...,m) 不需要包含@ 987654328@ 更多。简而言之,每个字符串只在倒排列表中出现一次。我的问题是如何以快速有效的方式建立这样的列表?任何时间复杂度都是有界的?

例如,A={a,b,e,g}, S1={abg}, S2={bg}, S3={gae}, S4={g}。那么我的倒排列表应该是:

a: S1,S3
b: S2     (since S1 has appeared previously, so we don't need to include it here)
e: 
g: S4

【问题讨论】:

  • 只是想知道:是否有任何理由 S4 不会在索引“a”下?该指数是否应该以某种方式平衡?如果不是,那么查看每个字符串的第一个字符并将其放在该索引下似乎就足够了。也许我不明白这个问题。
  • 那是我的问题。现已修复,谢谢!
  • 并非在所有情况下,如果S3={gae}
  • 我想我现在明白了——在这种情况下,Dante 似乎有你的答案。我能想到的唯一优化是在遇到字母表中最少的字符时停止扫描特定的字符串。
  • 重点是字符串的数量远大于字母的数量。那么有什么办法可以改善吗?

标签: string performance algorithm optimization inverted-index


【解决方案1】:

如果我正确理解您的问题,一个简单的解决方案是:

for each string in n strings
    find the "smallest" character in the string
    put the string in the list for the character

复杂度与字符串的总长度成正比,乘以用于顺序测试的常数。

如果有简单的测试方法,(例如,字符按字母顺序,全部小写,

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2012-10-17
    • 1970-01-01
    • 2011-02-03
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多