从随机数中收集唯一的数字

时间:2014-08-30 14:02:00

标签: algorithm

我没有在谷歌找到任何直接的答案,所以在这里......

他们的任何“算法”是从长(“长”不是指数据类型)随机数收集唯一数字/数字吗?

如, x = 6487657876579876867656768476876876117681761871687268726

我希望拥有从x获得的所有可能的唯一数字/数字。我不是在寻找代码。我正在寻找一种“已建立的算法”来完成这类工作或类似的工作。任何纸质/期刊/书籍链接都会很有用。

编辑:如果我要求从大量项目中搜索数字/项目的“算法”,答案将是:BFS,DFS,树,图表等。 类似地,我的问题不是编码,甚至不是关于任何特定的编程语言,而是关于查找(如果有的话)从随机数收集唯一数字的算法。正如“Muckle_ewe”在评论中所说 123可以是1,2,3,12,23,123但不是13-这是我的算法要求的极端。

请不要给我看代码。我期待一个参考/名称/链接到任何已建立的算法,可以做这种简单的工作或类似的工作。当然,任何人都可以为这项简单的工作构建算法,即使是我。但我正在寻找一个公认的既定算法,我可以作为参考。

第二次编辑:稍微改变一下要求,实际上我并不需要我想的所有子字符串。我发现后缀树很适合查找所有子字符串。所以它与我正在寻找的并不完全相同,但它是一个非常接近的。好吧,编辑Muckle_ewe的评论,123可能是1,2,3,12,23但不是13,123 - 所以我只需要一个长的随机数(x)的1位数或2位数字,这就是我的算法要求而不是旧的。

---感谢。

1 个答案:

答案 0 :(得分:1)

Imho,一种算法绑定到你在问题中没有提到的语言,所以我选择了我认识的最简单的语言,Ruby。我使用你的长数作为字符串来使它更容易。

x = "6487657876579876867656768476876876117681761871687268726"
x.split("").uniq.join #gives 64875912

现在我可以做得更精细,绕过Ruby所包含的方法,但重点是什么?重新开车?认为我比Ruby开发者更好?如果我想要,我可以查看他们用来构成Ruby方法的C代码。

OP编辑后编辑

嗯,在你编辑之后我终于看到了你的目标。 另请参阅此Quora question,其中有一个关于后缀树行进算法的说明。

我只是一个简单的程序员,所以我喜欢保持简单,所以一个简单的算法就是:从第一个字母开始并继续到最后一个,存储该字母的所有后缀,最后对存储的后缀进行排序删除重复项。 我想有更快的算法,我没有这个名字,我自己做了。 在Ruby中,这将是这样实现的,我使用一个短字符串来保持它......简单。这两个映射在数组中生成数组,因此在排序和删除重复项之前先将它们展平。

x = "BANANA"
(0...x.length).map {|i|(i...x.length).map { |j|x[i..j]}}.flatten.sort.uniq
# gives ["A", "AN", "ANA", "ANAN", "ANANA", "B", "BA", "BAN", "BANA", "BANAN", "BANANA", "N", "NA", "NAN", "NANA"]