【发布时间】:2014-03-13 00:18:06
【问题描述】:
我一直在尝试寻找一种高效的方法来查找一组按索引分组的fixed width 字符串中出现的字符的联合。像这样的东西;
s1 = "013965"
s2 = "015935"
s3 = "310012"
导致以下情况,其中每组数字都存在于 char 索引 n 处的所有字符串中:
out = "[03][1][350][90][631][52]"
我曾想过以一种非常天真的方式来遍历每个字符串,在每个索引处,同时将中间字符串存储在一个数组中,然后遍历该数组以构建输出值。然而,在我看来,我的方法似乎是一种效率极低的方法,与渐近最优解相去甚远。
【问题讨论】:
-
通常最好让事情在功能上正确,然后在找到可行的解决方案后担心性能。虽然以天真的方式做事通常会帮助您看到可以轻松获得收益的地方。
-
谷歌'配置文件矩阵生物信息学'。可能会给你一些想法。
-
我认为你不能比天真的方式做得更好,因为通常你需要遍历所有字符串的所有位置(除非在位置 k 所有数字 0-9 已经出现)。想象一下,您所有的字符串都以 4 开头,最后一个字符串以 5 开头,那么您需要遍历所有字符串的 0 位置,以免错过最后一个字符串的 5(该位置与所有其他字符串不同)。这同样适用于每个职位。
-
@MagicMan, peter.petrov:感谢 cmets 和建议,但我对优化的想法至关重要,因为该算法将针对 120,000 个长度约为 10 的字符串执行。
-
@groovy,以前从未见过。我刚刚想到的优化之一是停止处理索引应该已经检测到所有 0-9 字符
标签: java performance algorithm optimization union