我一直在尝试计算非常长词(antidisestablishmentarianism)的所有独特排列,虽然我可以计算单词的排列,但我遇到了停止制作重复。
通常我会在我的字符串上运行List<T>.Contains()
方法,但是排列列表变得如此之大,我无法将其保留在内存中。我之前犯了这个错误,并设法耗尽了我计算机中的所有8GB内存。为了防止再次发生这种情况,我更改了代码,将计算出的排列附加到文件中并从内存中释放。
我的主要问题是:如何在不将整个内容加载到内存中的情况下,如何防止将重复排列添加到我的文件中?是否可以有选择地加载,例如,前几兆字节,扫描,然后继续,直到文件完成,或者我应该朝不同的方向看?
这不是家庭作业,我的数学作业给出了一个假设的情况,即计算机每秒可以计算30个排列,并让我弄清楚计算所有排列需要多长时间。这不是问题,我不需要帮助,我只是想知道现代计算机执行相同任务需要多长时间。
答案 0 :(得分:4)
使用生成所有排列但没有重复的算法怎么样?这样你就不必在第一时间检查它们。
Google搜索“algorithm generate permutations”会出现数十个引用,以帮助您入门。例如Permutation Generation Methods