Keresés

Új hozzászólás Aktív témák

  • dqdb

    nagyúr

    válasz btz #7935 üzenetére

    Ha az [A, B] intervallumot szeretnéd véletlen sorrendben felsorolni (mert amit leírtál, az nem véletlenszám-generálás, hanem véletlensorrend-generálás), akkor készíts egy tömböt [A, A+1, A+2, …, B-1, B] elemekkel, egy A-tól B-ig vagy A-tól (A+B+1)/2-ig menő ciklussal cserélj ki két elemet, ahol a két sorrendet véletlenszám-generátorral határozod meg. A generálás pedig mehet a tömbből shift() metódussal, amíg van benne valami.

    Másik lehetőség, hogy gyűjtöd egy listába az eddig kisorsolt számokat. Ha a lista hossza megegyezik a B-A+1 értékkel, akkor nem tudsz visszaadni semmit sem, mert elfogytak a lehetőségek. Ha rövidebb a lista, akkor addig generálsz véletlen számot, amíg az nem lesz benne a listában. A visszaadott számot hozzáfűzöd a listához. A módszer hátránya a másikkal szemben, hogy induláskor igaz, hogy O(1) időt igényel O(n) helyett, de a generálás már legjobb esetben is O(n×log n) lesz O(1) helyett.

Új hozzászólás Aktív témák

Hirdetés