2014-08-30 49 views
2

我没有找到我要寻找一个在谷歌的任何直接的答案,所以这里去...收集独特的人数从随机数

是他们的任何“算法”收集独特的数字/数字从长(“长”不是数据类型的意思)随机数?

比如, 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

一种方法是转换为字符串,找到所有的子字符串并将它们输入到一个集合中,这将删除重复的。大多数编程语言都应该内置这些编程语言,因此应该只需要几行代码。这假定你不会跳过任何数字,即123可能是1,2,3,12,23,123但不是13 – 2014-08-30 14:29:45

+1

Pep's(现在删除的)答案按照所述解决了问题。正如他所说,请澄清这个问题,如果这不是你想要的。 – 2014-08-30 14:30:29

+0

你需要所有独特的子串?构建DFA。 – wildplasser 2014-08-30 15:45:06

回答

1

Imho,算法绑定到一个语言,你不会在你的问题中提到,所以我采取了我认识的最简单的一个,Ruby。我用你的长号作为一个字符串来使它更容易。

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

现在我可以做得更详细了,绕过Ruby包含的方法,但是会有什么意义呢?改变轮子?想我比Ruby开发者更好?如果我想要,我可以查找他们用来构建Ruby方法的C代码。后

编辑OP的编辑

嗯,你的编辑后,我终于看到你做了什么。 另见本Quora question,有关于后缀树旅行算法的aexplanation。

我只是一个简单的程序员,所以我喜欢把事情简单化,所以一个简单的算法是:从第一个字母开始,继续到最后,存储该字母的所有后缀,最后对存储的后缀进行排序并删除重复。 我想有更快的算法,我没有这个名字,我自己做了。 在Ruby中,这将以这种方式实现,我使用一个简短的字符串来保存它.... euh ...简单。这两张地图在一个数组中生成数组,所以我在排序和删除重复之前首先将它们弄平。

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"] 
+0

请阅读我的编辑 – Giliweed 2014-08-30 15:24:01