Editor PHP Xiaoxin membawakan anda artikel tentang algoritma untuk rawak susunan output tatasusunan pendek dalam bahasa Go. Dalam bahasa Go, tertib keluaran tatasusunan pendek tidak ditentukan, yang disebabkan oleh ciri konkurensi bahasa Go. Artikel ini akan memperkenalkan algoritma berdasarkan penjana nombor rawak, yang boleh merawak tertib keluaran tatasusunan pendek, supaya susunan keluaran berbeza setiap kali atur cara dilaksanakan, meningkatkan fleksibiliti dan kebolehubahan atur cara. Dengan membaca artikel ini, pembaca boleh belajar cara rawak susunan output tatasusunan pendek dalam bahasa Go dan menggunakannya pada projek mereka sendiri.
Perbezaan utama antara soalan ini dan jawapan pendua yang banyak ialah tatasusunan input sangat pendek, hanya 3 elemen. --
Andaikan saya mempunyai set yang ditempah int
. Saiz tatasusunan hanya 3 (atau lebih). Saya perlu merawak pesanan mereka dan mengembalikan tatasusunan baharu. Walaupun ia adalah soalan algoritma tulen, bahasa jawapan pilihan adalah pergi.
random.shuffle
. rand.shuffle
. Tetapi, inilah kod saya:
https://go.dev/play/p/cvu8_q96-9f
func randshuffle(a []int) { rand.seed(time.now().unixnano()) rand.shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] }) }
Berikut adalah keputusan salah satu larian ujian saya:
[2 1 3] [1 3 2] [2 1 3] [2 1 3] [1 3 2] [1 2 3] [2 3 1]
Ini nampaknya tidak begitu rawak.
Ada idea bagus untuk rawak yang lebih baik untuk tatasusunan tiga elemen pendek?
By the way,
rand.shuffle
. ya? Alih random.seed
daripada fungsi shuffle ke fungsi utama. Prng hanya boleh disemai sekali setiap program, dan peniruan kerawak yang berjaya dicapai melalui peralihan keadaan penjana dan bukannya benih. Jangan semai semula melainkan anda benar-benar memahami cara prng berfungsi dan cuba mengawal proses secara eksplisit atas sebab seperti kebolehulangan.
Pengubahsuaian ringkas berikut pada kod akan memenuhi keperluan anda:
package main import ( "fmt" "math/rand" "time" ) func main() { rand.seed(time.now().unixnano()) a := []int{1, 2, 3} for i := 0; i < 10; i++ { randshuffle(a) fmt.println(a) } } func randshuffle(a []int) { rand.shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] }) }
Ini akan menghasilkan keputusan berikut:
[2 3 1] [3 1 2] [2 1 3] [2 3 1] [1 2 3] [1 3 2] [1 2 3] [3 1 2] [3 2 1] [2 3 1]
Atas ialah kandungan terperinci Algoritma untuk rawak susunan output tatasusunan pendek dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!