日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

給定一個數組,編寫一個程序來生成數組元素的隨機排列,這個問題也被稱為“洗牌”或“隨機化給定的數組”。洗牌算法中數組元素的每種排列的可能性都應該是相同的。

洗牌算法是如何運行的

給定的數組是arr[],一個簡單的解決方法是創建一個輔助數組temp[],它最初是arr[]的副本。從temp[]中隨機選擇一個元素,將隨機選擇的元素復制到arr[0],然后從temp[]中刪除選擇的元素。重復相同的過程n次并繼續將元素復制到arr[1]、arr[2]、…。該解決方案的時間復雜度為O(n^2)。

Fisher-Yates shuffle算法的工作時間復雜度為O(n)。這里的假設是,我們得到一個函數rand(),它在O(1)時間內生成一個隨機數。這個想法是從最后一個元素開始,并將其與整個數組(包括最后一個)中隨機選擇的元素交換。現在考慮從0到n-2的數組(大小減1),重復這個過程直到我們找到第一個元素。

下面是詳細的算法:

對包含n個元素(索引0..n-1)的數組a進行洗牌

for i from n-1 downto 1 do
j=random integer with 0<=j<=i
exchange a[j]and a<i>

登錄后復制

Python實現洗牌算法

from random import randint
def randomize(arr,n):
for i in range(n-1,0,-1):
j=randint(0,i+1)
arr<i>,arr[j]=arr[j],arr<i>
return arr
arr=[1,2,3,4,5,6,7,8]
n=len(arr)
print(randomize(arr,n))
輸出結果:7 8 4 6 3 1 2 5

登錄后復制

分享到:
標簽:算法的概念
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定