Pogledajte određenu poruku
Staro 02. 02. 2006.   #18
Petar Marić
Python Ambassador
Master
 
Avatar Petar Marić
 
Datum učlanjenja: 06.06.2005
Lokacija: Novi Sad
Poruke: 602
Hvala: 28
27 "Hvala" u 17 poruka
Petar Marić će postati "faca" uskoro
Pošaljite ICQ poruku za Petar Marić
Lightbulb

Sad sam upravo generisao vektor od 2.000.000 celih pseudo-slučajnih brojeva sa opsegom [0..2^32-1] pomoću ove linije koda u MATLAB-u:
Kôd:
brojevi = randint(1, 2e6, 2^32);
Vreme izvršenja? Nešto malo više od 1 sekunde u virtuelnoj mašini.

Nešto sam malo kopao po MATLAB-ovom helpu ali nisam uspeo da nađem funkciju koja uklanja istovetne vrednosti iz vektora, tako da mogu da dam sledeći algoritam (mrzelo me da pišem kod) koji može biti prilično brži od vaših IMHO:
1. Pokrenemo MATLAB i u definišemo sledeće promenljive: broj_kodova (broj jedinstvenih kodova koje želimo da generišemo), multiplikator (generišemo s njim "rezervne kodove", uzmimo da je vrednost 2) i faktor_ubrzanja (ubrzava dolazak do rešenja tako što poništava efekat nejedinstvenih kodova - uzmimo za vrednost 2)

2. Izvršimo
Kôd:
podaci = sprintf('%x\n', randint(1, broj_kodova*multiplikator, 2^32));
Ovim korakom ćemo automatski dobiti broj_kodova*multiplikator kodova (u suštini su to 32-bitni brojevi u heksadecimalnoj reprezentaciji)

3. Izvršimo sledeći kod:
Kôd:
brojac = 1;
delta = broj_kodova;
4. Napravimo view jedinsteni_kodovi u bazi koji se sastoji od SELECT DISTINCT... SQL upita, tako da možemo jednostavnim brojanjem redova u view-u da saznamo koliko imamo jedinstvenih kodova, i hajde da kažemo da tu vrednost čuvamo u broj_jedinstvenih_kodova

5. Uradimo bulk insert podaci(brojac:delta+brojac-1, :) kodova u bazu (MATLAB podržava da se bulk insert izvrši jednim pozivom insert() funkcije)

6. Učitamo novu vrednost promenljive broj_jedinstvenih_kodova

7.
Kôd:
brojac = delta+brojac;
delta = (broj_kodova - broj_jedinstvenih_kodova) * faktor_ubrzanja;
8. Ako je delta > 0 onda se vraćamo na korak 5

9. Iz view-a povadimo broj_kodova redova i to smestimo u neku tabelu/dump/neki-drugi-izvor-podataka.

10. Pokrenemo, protegnemo se, popijemo kaficu i gotovo ;)



I have way too much free time on my hands :D
__________________
Python Ambassador of Serbia

Poslednja izmena od Petar Marić : 02. 02. 2006. u 02:00.
Petar Marić je offline   Odgovorite uz citat