Racket/Fisher-Yates Shuffle: Skillnad mellan sidversioner

Från Täpp-Anders
Hoppa till navigeringHoppa till sök
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))...'
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))