Racket/Fisher-Yates Shuffle: Skillnad mellan sidversioner
Från Täpp-Anders
Hoppa till navigeringHoppa till sök
Anders (diskussion | bidrag) Skapade sidan med '#lang racket ;; Fisher-Yates shuffle för en lista (modern version, O(n)) (define (fisher-yates lst) (let ([v (list->vector lst)]) ; Konvertera till vektor för effektiv mutation (for ([i (in-range (sub1 (vector-length v)) -1 -1)]) ; från n-1 ner till 1 (let ([j (random (add1 i))]) ; slumpmässigt index 0 till i (inklusive) ;; Byt plats mellan i och j (let ([temp (vector-ref v i)]) (vector-set! v i (vector-ref v j))...' |
Anders (diskussion | bidrag) Ingen redigeringssammanfattning |
||
| Rad 1: | Rad 1: | ||
<pre> | |||
#lang racket | #lang racket | ||
| Rad 14: | Rad 16: | ||
;; Exempel: | ;; Exempel: | ||
(fisher-yates '(1 2 3 4 5 6 7 8 9 10)) | (fisher-yates '(1 2 3 4 5 6 7 8 9 10)) | ||
</pre> | |||
Nuvarande version från 18 maj 2026 kl. 14.11
#lang racket
;; Fisher-Yates shuffle för en lista (modern version, O(n))
(define (fisher-yates lst)
(let ([v (list->vector lst)]) ; Konvertera till vektor för effektiv mutation
(for ([i (in-range (sub1 (vector-length v)) -1 -1)]) ; från n-1 ner till 1
(let ([j (random (add1 i))]) ; slumpmässigt index 0 till i (inklusive)
;; Byt plats mellan i och j
(let ([temp (vector-ref v i)])
(vector-set! v i (vector-ref v j))
(vector-set! v j temp))))
(vector->list v))) ; Returnera som lista igen
;; Exempel:
(fisher-yates '(1 2 3 4 5 6 7 8 9 10))