Az összes n hosszú 0-1 sorozat generálása a lehető leghatékonyabban? (JAVA)
for (int i = 0; i < (int) Math.pow(2, n); i++) {
if (Integer.toBinaryString(i).length() == n) {
System.out.println(Integer.toBinaryString(i));
char[] numbersCharArray2 = Integer.toBinaryString(i).toCharArray();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < numbersCharArray2.length; j++) {
if (numbersCharArray2[j] == '0') {
numbersCharArray2[j] = '1';
} else {
numbersCharArray2[j] = '0';
}
sb.append(numbersCharArray2[j]);
}
System.out.println(sb.toString());
}
Jelenleg így csinálom. Ez viszont n=21 esetén már 17 másodperc, n=22 esetén pedig ezt írja: Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main".
#4 vagyok:
Valószínűleg azért nem megy neked mert nincs fönt az apache commons, de ezt biztos elárulja az hibaüzenet is úgyhogy nem mondok újat. Ennek ellenére látod hogy mit csinál és hogy kéne megoldanod, csak lusta vagy elgondolkozni rajta.
Ami az algoritmust illeti: nem látsz az algoritmusok sebessége közt különbséget mert a szűk keresztmetszet maga a kiírás, azaz nem az algoritmus a lassú, hanem kiírni 2^21 szöveget, függetlenül attól hogy hogyan számoltad ki.
Az előbbi a standard csomagok használatával, kicsit lassabban:
for(int i = 0; i < (int) Math.pow(2, n); i++)
System.out.println(String.format("%"+n+"s", Integer.toBinaryString(i)).replace(" ", "0"));
10. válaszoló:
Rosszul gondolod.
n=3 esetén az output a belső ciklus nélkül:
100
101
110
111
11. válaszoló:
Ez eddig a leghatékonyabb, köszönöm.
#1 és #10 vagyok
Én ez alapján írom:
for (int i = 0; i < (int) Math.pow(2, n); i++) {
És te ezzel a sorral nehezíted a saját életed, ezzel felezed meg:
if (Integer.toBinaryString(i).length() == n) {
Ha ez nem lenne benne, perfekt lenne. És ezt nyilván azért raktad bele, mert ugye 0-ra "0"-t ad és nem "000"-t (ahogy #12 írja). Erre meg ott van a padding, amit egy korábbi kolléga írt.
És továbbra is megoldható a feladat 2 sorban, ahogy már párszor írták, és én is utaltam rá (#1).
10:
Te eddig a belső ciklusról beszéltél nem az arról az if-ről, ez nem tudom, hogy jön most ide. Ahogy a kolléga javasolta módosítottam az i kezdő értékét, ezzel nincs gond, elismerem nem gondoltam át jól.
Elmondom még egyszer: ahhoz a megoldáshoz kell a belső ciklus.
Tudtam, hogy van két soros megoldás, ezért kérdeztem meg, és meg is kaptam megfelelő választ. Nem tőled, te csak okoskodsz és nincs igazad.
#16:
Veled valami nagyon nincs rendben.
Nem tudom, miért kell személyeskedni. Azt sem értem, miért nem vagy képes elfogadni, hogy tévedtél. Emberi dolog, én is szoktam, most is volt egy rossz megoldásom, elismertem, kezdő programozó vagyok.
Azt gondolom, teljesen nem normálisan feltettem egy kérdést, melyre te fölényesen válaszoltál egy baromságot, ráadásul látatlanba, tesztelés nélkül. Elmondtam kétszer is abszolút kulturáltan, kedvesen, hogy ez nem így van. Szeretnélek nagyon szépen megkérni, hogy teszteld le ezt, hogy mit ír ki, hogy te is lásd a saját szemeddel végre:
for (int i = (int) Math.pow(2, n)/2; i < (int) Math.pow(2, n); i++) {
System.out.println(Integer.toBinaryString(i));
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!