Kezdőoldal » Számítástechnika » Programozás » Egy n elemű tömbnek elemeit...

Egy n elemű tömbnek elemeit hogy tudom véletlenszerűen összekavarni? Milyen algoritmussal?

Figyelt kérdés

Válaszokat előre is köszönöm.


<A tömb elemei véletlenszerű sorrendben legyenek a tömbben.>



2016. szept. 5. 19:02
 1/8 anonim ***** válasza:
82%
Fogsz egy randomszám generátort, generálsz számokat 0-tól maxindex-ig és cserélgeted az elemeket a generált indexek szerint.
2016. szept. 5. 19:11
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
93%

Ha nem kell, hogy tényleg véletlenszerű legyen a keverés, akkor csinálhatod úgy is, ahogy az első javasolta.

De ha tényleg véletlenszerűt akarsz, akkor használd a Fisher—Yates keverést.


Miért? Itt a válasz:

[link]

2016. szept. 5. 20:02
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
Köszönöm a válaszokat.
2016. szept. 5. 21:22
 4/8 anonim ***** válasza:
41%
Erre magamtól rájöttem, nem tudtam, hogy ennek van külön neve. Az én módszerem annyiban tér el ettől, hogy fordítva járja be a tömböt, vagyis pont a tükörképe. (Ez onnan jött ki, hogy egy n elemű tömbből k elem randomba kiválasztása, k=n-re jött ki ez a megoldás ami mellesleg random keverés az egyenletességi hipotézisnek megfelelően.)
2016. szept. 6. 20:10
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

"egy 3 kártyából álló pakli esetén 27 variáció (33 = 3 x 3 x 3 = 27) jöhet ki a kártyák sorrendjére"


Ez mi akar lenni?

2016. szept. 6. 22:43
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
46%

@22:43

Én úgy értelmezem, hogy a fentebbi keverőciklusnak 27 lehetséges variációja van ahogy lefuthat.

2016. szept. 7. 01:36
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:
90%

Mi a bajotok a válaszommal?

Ha n=3 akkor az for (int i = 0; i < cards.Length; i++) { int n = rand.Next(cards.Length); Swap(ref cards[i], ref cards[n]); }

Ciklusnak 27 azaz 3^3 lehetséges állapot közül választ ki egyet. Mivel minden iterációban 3 féle érték közül választ ki egyet a generátor egyenlő valószínűséggel ha az egyenletességi hipotézisnek megfelelően generál random-ot. Ez a 3^3 állapot fog leképeződni 3 faktoriális = 6 féle lehetséges keverés végkimenetre. Bizonyos permutációknak nagyobb esélye van míg egyes keveréseknek kevesebb.

Ha a

for (int i = cards.Length - 1; i > 0; i--)

{

int n = rand.Next(i + 1);

Swap(ref cards[i], ref cards[n]);

}

Keveréssel csináljuk akkor n=3-ra 3 faktoriális lehetséges állapot közül fut le a ciklus, ha jó a randomgenerátor akkor minden lehetséges permutációnak egyenlő esélye van.

2016. szept. 8. 21:27
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:
Én se igazán értem, hogy mi alapján adogatják egyesek az értékelés... az első, egyértelműen rossz válasz meg 83%-nál jár.
2016. szept. 8. 21:50
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!