Kezdőoldal » Számítástechnika » Programozás » Az összes n hosszú 0-1 sorozat...

Az összes n hosszú 0-1 sorozat generálása a lehető leghatékonyabban? (JAVA)

Figyelt kérdés

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".


2015. máj. 5. 15:39
1 2
 11/18 anonim ***** válasza:
100%

#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"));

2015. máj. 5. 17:09
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:
# 10 az a baja, hogy nem 0000-t ír, hanem simán 0-t
2015. máj. 5. 17:14
Hasznos számodra ez a válasz?
 13/18 A kérdező kommentje:

10. válaszoló:

Rosszul gondolod.

n=3 esetén az output a belső ciklus nélkül:


100

101

110

111

2015. máj. 5. 17:16
 14/18 A kérdező kommentje:

11. válaszoló:


Ez eddig a leghatékonyabb, köszönöm.

2015. máj. 5. 17:24
 15/18 anonim ***** válasza:

#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).

2015. máj. 5. 17:33
Hasznos számodra ez a válasz?
 16/18 A kérdező kommentje:

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.

2015. máj. 5. 17:42
 17/18 anonim ***** válasza:

#16:

Veled valami nagyon nincs rendben.

2015. máj. 5. 19:28
Hasznos számodra ez a válasz?
 18/18 A kérdező kommentje:

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));

}

2015. máj. 5. 19:45
1 2

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!