Algoritma untuk rawak susunan output tatasusunan pendek dalam Go

WBOY
Lepaskan: 2024-02-15 12:57:08
ke hadapan
782 orang telah melayarinya

Go 中短数组的输出顺序随机化的算法

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.

Kandungan soalan

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.

  • Menggunakan python, bagaimana untuk mengeluarkan senarai dalam susunan rawak? Jawapannya ialah random.shuffle.
  • Menggunakan go, https://yourbasic.org/golang/shuffle-slice-array/, jawapannya sepatutnya 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] })
}
Salin selepas log masuk

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]
Salin selepas log masuk

Ini nampaknya tidak begitu rawak.

Ada idea bagus untuk rawak yang lebih baik untuk tatasusunan tiga elemen pendek?

By the way,

  • Bagaimana untuk mengeluarkan elemen tatasusunan dalam susunan rawak menggunakan vhdl mengatakan untuk menggunakan daftar anjakan maklum balas linear, tetapi saya fikir itu bukan idea yang baik untuk masalah ini.
  • Bagaimana untuk rawak (shuffle) tatasusunan javascript? Memandangkan algoritma shuffling durstenfeld, versi fisher-yates yang dioptimumkan Tetapi saya rasa keputusannya akan sangat serupa dengan go's rand.shuffle. ya?

Penyelesaian

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] })
}
Salin selepas log masuk

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]
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan