亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用.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 關注
  • 658 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號