Nytt i forumet
Senaste privatannonserna
Prylar säljes, köpes, bytes och skänkes
| 2012-04-25, 21:57 | #1 |
Isildur79Medlem Registrerad: apr 2012 |
Java - tidskomplexitet - SkipList
Hej!
Jag har fastnat med en uppgift som går utt på att mäta effektiviteten hos ConcurrentSkipList. Enligt manualen ska den prestera log(n). Jag skapar 10 olika SkipList i storleksordningen 100 000, 200 000, 300 000 upp till 1000 000. Vare lista fylls med tal 1,3,6,9...o.s.v.. Därefter söker jag i varje skiplsita efter 10 000 slumpmässiga tal. Se kodexempel nedan. Jag kör varje klockning ca 100 gånger och räknar sedan ut snittiden. Tyvärr får jag fel resultat och jag vet inte vad jag gör för fel. Räknar man ut log(100000) på miniräknaren så blir det 5 och log(1000000) blir 6. Alltså ska resultaten för varje testning hamna ganska nära varandra. Mitt resultat blir ungefär ett spann från 5-15 vilket inte är rätt! Tacksam för alla tips och ideer jag kan få angående detta. ConcurrentSkipListSet skiplista1 = new ConcurrentSkipListSet(); long start = System.currentTimeMillis(); //klocka starttid for (int i = 0; i < 10000; i++) { skiplista.contains(mylist.get(i)); } long end = System.currentTimeMillis(); //klocka sluttid long resultat = (end - start); |
|
|
| 2012-04-25, 22:15 | #2 |
MrMadManMedlem Plats: Umeå Registrerad: maj 2003 |
Jag gissar att man med tidskomplexitet menar Stora Ordo?
Om så är fallet, så är du inne på helt fel spår och du sitter och mäter med klocka. Mitt tips är att läsa på om stora Ordo. Om jag missförstår något så får du gärna posta hela uppgiften här. För övrigt tycker jag resultaten verkar stämma in med O(log n) |
|
|
| 2012-04-25, 22:44 | #3 |
Mikael07Medlem Plats: Göteborg Registrerad: mar 2011 |
Tänk på att det är skillnad på Ordo och Ordo med en godtycklig faktor. Alltså 11029484 * O(log n) = O(log n).
Tidsserierna 1 2 3 4 och 300 600 900 1200 är alltså ekvivalenta ur ett tidskomplexitetsperspektiv.
__________________
.:: Linux Mint :: i5 2500k :: Gainward GTX580 Phantom :: XMS3 8Gb :: Seagate 2Tb ::. |
|
|
| 2012-04-25, 23:39 | #4 |
tufflaxMedlem Plats: Stockholm Registrerad: jan 2010 |
Citat:
Citat:
Citat:
Jag kan tänka mig tre saker. Den första (inte så trolig kanske) är att skiplisten blir dålig på nått sätt om du lägger till talen i ordning. Det andra är att en riktig dator är mer komplex än de modeller man burkar tänka på i datalogi, och att saker som cachemissar och annat blir vanligare med större listor. Eller så kanske du bara gjort nått konstigt. Pastea hela koden kanske?
Senast redigerad av tufflax 2012-04-26 klockan 00:07. |
|
|
| 2012-04-25, 23:55 | #5 |
MrMadManMedlem Plats: Umeå Registrerad: maj 2003 |
Citat:
Beräkningarna kan i vissa fall backas upp av mätstatistik, men då behövs mycket större variation i in-datat. Citat:
Jag råder dig att läsa på om Ordo-begreppet. Du har inte förstått det rätt. |
|
|
| 2012-04-26, 00:03 | #6 |
tufflaxMedlem Plats: Stockholm Registrerad: jan 2010 |
Citat:
Citat:
Och jag kan begreppet fullständigt. |
|
|
| 2012-04-26, 00:09 | #7 |
Mikael07Medlem Plats: Göteborg Registrerad: mar 2011 |
Citat:
Tydligast är ju att göra en semi-log plot, då kan man även härleda vilken bas det är på logaritmen. Det är rätt stor skillnad på log2 och log10 t.ex. om man bara tittar på mätvärden i linjär bas, vilket kan vara förvillande. För att servera det på ett fat för TS: Om du plottar problemstorleken över x-axeln, och tiden över y, så ska det se ut ungefär så här http://algebra.freehomeworkmathhelp....tion_graph.PNG ![]() Edit: men strunta i värdena på axlarna i bilden
__________________
.:: Linux Mint :: i5 2500k :: Gainward GTX580 Phantom :: XMS3 8Gb :: Seagate 2Tb ::. |
|
|
| 2012-04-26, 00:19 | #9 |
Mikael07Medlem Plats: Göteborg Registrerad: mar 2011 |
Citat:
"Räknar man ut log(100000) på miniräknaren så blir det 5 och log(1000000) blir 6." TS verkar anta att hans mätvärden ska bli exakt 5 och 6 för dessa storlekar, vilket motsvarar 1*log10(n) Det är ingen skillnad för komplexitetsanalys, absolut, men som du själv antydde, han ska ju verifiera med mättider att algoritmen uppvisar logaritmisk komplexitet. Då kan det vara snurrigt om man får en mätserie i log2 bas men försöker verifiera numeriskt med log10 bas.
__________________
.:: Linux Mint :: i5 2500k :: Gainward GTX580 Phantom :: XMS3 8Gb :: Seagate 2Tb ::. |
|
|
| 2012-04-26, 00:23 | #10 |
MrMadManMedlem Plats: Umeå Registrerad: maj 2003 |
Citat:
"5-15" (dvs en faktor 3, eller han/hon kanske t.o.m. menade en faktor 5 till 15) är inte en faktor 1.2, så det stämmer inte så bra. Och jag kan begreppet fullständigt.[/QUOTE] Jag är tveksam till det. Men om du gör det så vet du också att faktorn 3 är helt obetydlig. Det viktiga är hur lösningstiden växer tillsammans med problemrymden, och det behövs fler mätresultat om man ska kunna dra några slutsatser. |
|
|
| 2012-04-26, 01:01 | #13 |
Mikael07Medlem Plats: Göteborg Registrerad: mar 2011 |
Citat:
Edit: tog bort lite detaljtrams Senast redigerad av Mikael07 2012-04-26 klockan 01:26.
__________________
.:: Linux Mint :: i5 2500k :: Gainward GTX580 Phantom :: XMS3 8Gb :: Seagate 2Tb ::. |
|
|
| 2012-04-26, 04:02 | #14 |
TriffidMedlem Plats: Lund Registrerad: okt 2002 |
Om du skall mäta så borde du kanske kolla hur lång tid det tar att plocka ut ett värde om listan är 1000 stor och ett om listan är 100000 stor och sen jämföra den tiden. Detta måste göras väldigt många gånger för att få någon säkerhet i det dock. Är det då ordo N borde värdet hamna runt 500tidsenheter för den lilla och 50000tidsenheter för den stora, och om det är ordo log(n) borde/behöver värdet för det lilla och det stora inte skilja så värst mycket. osv..
__________________
Dator: U2711 | u2211 | Silverstone Fortress 2 | Topre realforce 45g | GTX680 DCII Top | Intel i5 3570k @ 4.5 | Intel X25-m | 12gb ram | Asus p8z77-v Ljud: Swans M1 | hk6550 |Subwoofer: bk xls200 | xonar essence st | O2 | sennheiser hd650 | alessandro ms-1 |
|
|
| 2012-04-26, 08:18 | #15 |
tufflaxMedlem Plats: Stockholm Registrerad: jan 2010 |
Citat:
|
|
|
| 2012-04-26, 09:28 | #16 |
Mikael07Medlem Plats: Göteborg Registrerad: mar 2011 |
Citat:
__________________
.:: Linux Mint :: i5 2500k :: Gainward GTX580 Phantom :: XMS3 8Gb :: Seagate 2Tb ::. |
|
|
Redaktionens senaste nyhetsrubriker
Prylar säljes, köpes, bytes och skänkes