为了账号安全,请及时绑定邮箱和手机立即绑定

用.NET随机化数组的最佳方法

用.NET随机化数组的最佳方法

慕标琳琳 2019-06-20 15:28:58
用.NET随机化数组的最佳方法用.NET随机化字符串数组的最佳方法是什么?我的数组包含大约500个字符串,我想创建一个新的Array有相同的字符串,但顺序是随机的。请在你的答案中包括一个C#例子。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

你在找洗牌算法对吧?

好的,有两种方法可以做到这一点:clever-but-people-always-seem-to-misunderstand-it-and-get-it-wrong-so-maybe-its-not-that-clever-after-all方式,和愚蠢的石头-但谁在乎-因为它的工作方式。

哑道

  • 创建第一个数组的副本,但是将每个字符串标记为一个随机数。
  • 根据随机数对重复数组进行排序。

这个算法工作得很好,但是要确保随机数生成器不太可能用相同的数字标记两个字符串。因为所谓的生日悖论,这种情况发生的频率比你预期的要高。它的时间复杂度是O(n原木n).

聪明之道

我将其描述为递归算法:

洗牌大小数组n(范围内的指数[0.n-1]):

如果n = 0
  • 无所事事
如果n > 0
  • (递归步骤)

    洗牌

    n

    -数组的一个元素
  • 选择一个随机指数,

    x

    ,在范围内[0.

    n-1]

  • 交换索引处的元素

    n

    -1,元素在索引处

    x

迭代等价于遍历数组,在执行过程中用随机元素交换,但请注意,不能与元素交换。迭代器指向的那个。这是一个非常常见的错误,并导致有偏见的洗牌。

时间复杂度为O(n).


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信