問題:
隨機打亂一個數(shù)組
實質(zhì):
洗牌問題
方式:
Fisher-Yates算法
代碼示例:
package main
import (
"errors"
"fmt"
"math/rand"
"time"
)
// 問題:隨機打亂一個數(shù)組
// 實質(zhì):洗牌問題
// 方式:Fisher-Yates算法
// 代碼示例:
func main() {
sli := []int64{1, 2, 3, 4, 5, 6, 7, 8}
newSli, err := solve(sli)
fmt.Printf("%+v \n", newSli)
fmt.Printf("%+v \n", err)
}
func init(){
rand.Seed(time.Now().UnixNano())
}
func solve(sli []int64) ([]int64, error) {
len := len(sli)
if len <= 1 {
return []int64{}, errors.New("參數(shù)不合法")
}
for i := len - 1; i > 0; i-- {
randNum := rand.Intn(i)
sli[i], sli[randNum] = sli[randNum], sli[i]
}
return sli, nil
}
結(jié)語:
隨機數(shù)生成算法帶來的誤差,會造成洗牌的結(jié)果整體上不滿足均勻分布。