Kombinace cisel – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kombinace cisel – Python – Fórum – Programujte.comKombinace cisel – Python – Fórum – Programujte.com

 

Martin0
Newbie
27. 7. 2006   #1
-
0
-

Hoj. Mám takovej pro mě neřešitelnej problém. Mám libovolný počet libovolných čísel(řekněme že čísel bude 1 až 10). A potřebuji z nich udělat kombinace. Když budu mít 4 čísla tak bych chtěl napřed dvojice, pak trojice a pak čtveřice. nevím jak to udělat. Udělám to třeba pro 3 čísla, ale nevím jak to udělat pro lib. počet.
Tady je jednoduchá nepoužitelná ukázka pro 3 čísla(v každé kombinaci nesmí být ani jedno číslo 2x a na pořadí čísel v kombinaci nezáleží)



cisla=[1,2,3]
seznam=[]
sez=[]


for cislo in cisla:
sez=[]
sez.append(cislo)
seznam.append(sez)



for x in cisla:
for y in cisla:
if x!=y:
if x<y:
sez=[]
sez.append(x)
sez.append(y)
if sez not in seznam:
seznam.append(sez)
elif x>y:
sez=[]
sez.append(y)
sez.append(x)
if sez not in seznam:
seznam.append(sez)




seznam.append(cisla)
print seznam,"n"

Nahlásit jako SPAM
IP: ...–
geon0
Grafoman
27. 7. 2006   #2
-
0
-

myslím, že hledáš rekurzivní funkce. Funkce, které volají sami sebe, pokaždé s upravenými argumenty. Vždy uvnitř bývá několik if, aby se rozlišilo, jestli už se má počítat něco konkrétního, nebo znovu zavolat sebe samu.

Příklad faktoriálu:



def fakt(N):
if N==1:
return 1
else:
return N*fakt(N-1)

N=input('Zadej cislo k faktorialu: ')
x=fakt(N)
print '%E' % x

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Martin0
Newbie
27. 7. 2006   #3
-
0
-

No já právě vyšší matematiku zatím moc neznám (až budu ve vyšším ročníku, tak možná). Potřeboval bych někde sehnat script na výpočet potenční množiny (power set). Nemáte někdo?

Nahlásit jako SPAM
IP: ...–
geon0
Grafoman
27. 7. 2006   #4
-
0
-
Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Martin0
Newbie
27. 7. 2006   #5
-
0
-

Moooc hezký. Teď se to zkusím pochopit, ale 80% věcí z toho neznám (taky tam mohl dát komentáře :D )

Nahlásit jako SPAM
IP: ...–
Martin0
Newbie
27. 7. 2006   #6
-
0
-

Mohl by mi n?kdo objasnit jeden ??dek v tomto scriptu?



def powerset(base):
"Compute the set of all subsets of a set."
powerset = [] #vytvor seznam
for n in xrange(2 ** len(base)): #pro kazde n N rozmezi(2 na delku seznamu(tj kolik vlastne bude kombinaci???))
subset = [] #podmonozina se vyprazdni
for e in xrange(len(base)): #pro E v rozmezi(delky seznamu)
if n & 2 ** e: #ALE CO TENHLE RADEK????????
subset.append(base[e]) #pridej do podmnoziny prvek base[E]
powerset.append(subset) #podmozinu pridej do seznamu
return powerset #vrat mnozinu


V?bec nech?pu tu podm?nku (if n & 2 ** e), nevím co ov??uje. Osv?tlil by mi to n?kdo pros?m?

Nahlásit jako SPAM
IP: ...–
geon0
Grafoman
27. 7. 2006   #7
-
0
-

pravděpodobně jde o jádro celého alogitmu. Proč to tak je ti neřeknu, pomůžu jen s tím, co to dělá. ** je mocnění a má přednost. Takže se udělá 2**e (dvojka seumocn?í eckem). & je bitově orientovaná AND http://docs.python.org/lib/bitstring-ops.html. Např. 4&2 je nula, protože 4 se převede na dvojkov= číslo, stejná tak dvojka a pak se jednotlibvě bity udělají AND. tedy 100 & 010 = 0. Takže pak se bitově dvojkově vynásobí n a 2**e a to je výsledek.

;-)

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Kombinace — založil David

Kombinace — založil fcelik

Výpočet kombinace — založil Aliande

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý