我需要创建一个适合某个范围的非顺序数字列表。例如,我需要生成一个从 1 到 100 万的数字列表,并确保所有数字都没有按顺序排列,并且它们被完全打乱。我想我的第一个问题是,是否有任何好的算法可以提供帮助以及如何最好地实现它。
我目前不确定最好的实现方式,要么通过将数字吐出到 XML 文件中的 C# 控制台应用程序,要么通过将数字吐出到一个表或一组表中的数据库,但是这对于真正找出“洗牌”数字集的最佳方法来说真的是次要的。
有什么建议吗?
罗布
最佳答案
首先,如果没有的数字是连续的,那么序列中的每个数字都必须小于它的前身。具有该属性的序列从大到小排序!显然那不是你想要的。 (或者您可能根本不想要 5、6、7 形式的任何子序列?但是 6、8、20 可以吗?)
为了正确回答您的问题,我们需要了解有关问题空间的更多信息。我想知道的事情:
1) 范围的大小等于、大于还是小于序列的大小?也就是说,您要问 10 到 10 之间的十个数字,1 到 10 之间的五个数字还是 1 到 10 之间的五十个数字?
2) 序列包含重复是否可以接受? (如果序列中的项数大于范围,则显然是。)
3) 随机性的用途是什么?大多数随机数生成器只是伪随机的;聪明的攻击者可以通过了解前面的数字来推断下一个“随机”数字。例如,如果您要从 52 张牌中生成一系列的 5 张牌来组成一手扑克牌,您需要非常强的随机性;你不希望玩家能够推断出他们的对手手中有什么。
关于c# - 建立一个非顺序的数字列表(从一个大范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1881553/