En fråga om random och sortering i Python

Här diskuteras programmering och utveckling
Användarvisningsbild
ZerQ
Inlägg: 160
Blev medlem: 01 aug 2007, 08:40
OS: Annat GNU/Linux
Ort: Ornsköldsvik
Kontakt:

En fråga om random och sortering i Python

Inlägg av ZerQ »

Hejsan

Jag sitter och leker med ett program men har en övergripande fråga om hur man bäst angriper ett problem.

Problemet: Jag har kör random.randrange och slumpar fram ett x antal integer tal som jag vill inte skall bli samma. Hur angriper man bäst att skanna efter likadana nummer?

Jag har 2 vägar att gå, Det ena är att köra klart en seq av tal och sedan gå igenom hela listan steg för steg, det andra är att börja jämföra talen redan när man skapar dom.

Vilket sätt är bäst att ordna detta?
Användarvisningsbild
micke_nordin
Inlägg: 1539
Blev medlem: 21 aug 2008, 17:03
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: En fråga om random och sortering i Python

Inlägg av micke_nordin »

Vad gör du med talen? Om du sparar dem i en array är det ju trivialt att kolla igenom arrayen och se efter om talet finns där redan innan du sparar det.

/Micke
Användarvisningsbild
Substrata
Inlägg: 71
Blev medlem: 13 apr 2010, 11:01
OS: Arch Linux
Utgåva: Vet inte/ingen utgåva passar

Re: En fråga om random och sortering i Python

Inlägg av Substrata »

Enklast är nog att lagra dem i ett set, som ju inte tillåter dubbletter.

Om du använder en vanlig array gissar jag att tidskomplexiteten trots allt är O(n²) i båda fallen eftersom du stegar igenom alla poster för varje post. Vill du få bättre resultat behöver du hålla datat sorterat, exempelvis genom binära sökträd, och jag förmodar att Pythons set gör just något liknande.

En annan metod, om applicerbar, är att använda godtyckligt stora heltal för att flagga vilka tal som är tagna. Givet ett slumptal m så testar du gentemot bit m i heltalet innan du går vidare.
Användarvisningsbild
cthulhu
Inlägg: 789
Blev medlem: 05 jan 2009, 14:11
OS: Debian

Re: En fråga om random och sortering i Python

Inlägg av cthulhu »

Sitter sjalv och liker lite med python, men min erfarenhet fran C++ dar jag pysslat med just mycket slumptal och faktiskt hade en bug som uppstod av att jag hade tva identiska slumptal, vilket skedde ca var 10^15 gang, eftersom en double lagras i 52 bitar, dvs. 2^52 = 10^15 = 1 000 000 000 000 000 ggr innan jag far tva identiska tal, i snitt. Nu funkar ju inte python lika dant, eftersom man inte initierar dem pa samma satt som i C (med double/float/integer), men detta ger i alla fall en vink om att det inte hande sarskilt ofta.
David Andersson
Inlägg: 1269
Blev medlem: 15 dec 2007, 03:20
OS: Xubuntu

Re: En fråga om random och sortering i Python

Inlägg av David Andersson »

ZerQ skrev: Problemet: Jag har kör random.randrange och slumpar fram ett x antal integer tal som jag vill inte skall bli samma. Hur angriper man bäst att skanna efter likadana nummer?
Nu vet jag inte alla förutsättningar, men om x också är antalet tillåtna värden på slumptalen (största slumptal - minsta slumptal + 1 = x = listans längd), så borde random.shuffle vara effektivast.

Kod: Markera allt

lista = range(10)
random.shuffle(lista)
print lista
Skriv svar

Återgå till "Programmering och webbdesign"