A SO post关于生成所有的排列让我想到了一些替代方法。我正在考虑使用空间/运行时的折衷方案,并想知道人们是否可以在尝试使用C#实现时批评这种方法和可能的打嗝。排列查找算法的分析(伪代码)
的步骤去如下:
鉴于均匀元素的数据结构,在计数结构元件的数目。
假设置换包括该结构的所有的元素,从步骤1
计算值的阶乘实例化
<key(Somehashofcollection),Collection<data-structure of homogeneous elements>>
类型的一个较新的结构(词典)和初始化的计数器。散列(???)来自步骤1的种子结构,并将散列和集合的键/值对插入字典中。通过1
随机递增计数器洗牌(???)种子结构的顺序,它散列,然后尝试将其插入字典从步骤3
如果存在冲突在哈希中,再次重复步骤5以获得新的订单和散列并检查冲突。一旦成功插入由1
直到计数器等于步骤计算阶乘重复步骤5 & 6,计数器增加2
好像做使用某种随机的这种方式(这对我来说目前是一个黑匣子)可能有助于在不合理大小的数据集的适当时间范围内获取所有的排列组合。
这将是巨大的,得到这么伟大的思想家一些反馈,进一步分析这种做法,其目的是从传统的蛮力方法在这种性质的算法普遍,也实现这样的算法的反响偏离使用C#。
感谢
感谢您的精心准备。这是我一直在寻找的那种分析。这样做的目的不是为了提出一种“更好”/“更差”/“非常糟糕”的方法,只是探索替代方案。作为科学界的一部分,你的分析量化了缺点,但我认为在回应时,我们应该避免使用与敌意接近的言辞。 – 2010-07-22 14:26:29
@sc_ray:对不起,我不是故意要冒犯你。我会编辑它。 – 2010-07-22 14:30:10
@Moron:完全没问题。因此,从时间的角度来看,从外行的话来说,问题源于随机化,在实际缩小独特的排列之前需要进行太多的尝试,并且从空间的角度来看,存在不必要的重复存储整个集合的开销在存储器中存储简单的哈希值就足够了(考虑到哈希函数是完美的) – 2010-07-22 14:54:19