Elemente aleatoare ale matricei fără repetiții, blogul lui elwood

Uneori trebuie să rezolvați această problemă: există o matrice din care se aleg elemente aleatorii aleatorii. Și trebuie să ne asigurăm că odată ce articolele selectate nu mai sunt pentru noi. Soluția evidentă pe frunte este crearea unui set în care să se păstreze elementele selectate sau elementele de identificare ale acestora sunt complet inutile: nu numai că veți avea nevoie de memorie suplimentară, deci nu există nici o garanție că imediat următorul element va fi găsit. Cu cât alegem mai mult elementele, cu atât mai mult vom fi forțați să căutăm următorul element aleatoriu care lipsește încă în setul utilizat. O altă modalitate este de a muta elementele folosite într-o altă colecție - funcționează numai dacă colecția sursă permite operația de eliminare și este implementată eficient în ea. Prin urmare, pentru matrice nu este potrivit (elimina pur și simplu nu), și pentru ArrayList'ov, de asemenea, nu este potrivit (elimina ineficient). Aici, cu LinkedList va funcționa destul de bine. Confuză numai imposibilitatea de a restabili starea inițială a colecției după finalizarea algoritmului. Apoi este mai ușor să copiați integral colecția originală și să eliminați elementele din ea. Dar acest lucru nu este foarte mult, dacă colecția este mare, dar avem nevoie doar de unsprezece elemente.

În general, hai să folosim spiritul soldatului și să facem următorul algoritm: fiecare element selectabil următor se schimbă cu ultimul element al matricei și se reduce lungimea unei părți a matricei folosite de unul. La sfârșitul matricei, elementele "folosite" se acumulează. Și pentru a salva abilitatea de a reveni la starea originală, următorul în ArrayList vom scrie indicii originali ai elementelor folosite.

Elemente aleatoare ale matricei fără repetiții, blogul lui elwood

Elemente aleatoare ale matricei fără repetiții, blogul lui elwood

Elemente aleatoare ale matricei fără repetiții, blogul lui elwood

De fapt, am scris o clasă care implementează această idee și, considerând că este util, aduc codul.







Articole similare

Trimiteți-le prietenilor: