-
Obecne kombinace
Zajimalo by mne, jak byste obecne resili proble kdy mate napriklad 5 stringu a z techto stringu chcete dostat dvojice pomoci kombinace bez opakovani. Matematicky by to bylo 5!/2!(5-2)!... jenze ja bych rad mel na vystupu primo ty dvojice bez opakovani. Co byste pouzili obecne, bez vazani na jazyk.
Diky
-
Re: Obecne kombinace
Pokud chces dvojice, tak je to celkem jednoduche, vzdy jen dve strany na porovnani.
Pokud by slov bylo hodne a melo to byt trochu rychle, tak by bylo vhodne tam dat nejakou hashmapu misto obycejneho pole.
Jelikoz nevim, do jake miry te zajima optimalizace, tak prikladam nejjednodussi, naivni reseni.
Je to napsane v pythonu, takze by to snad mohlo byt celkem citelne.
Kód:
zadani = ["aa", "bb", "cc", "dd", "ee"]
dvojice = []
for x in zadani:
for y in zadani:
if(x != y): # bez opakovani
if [y, x] not in dvojice: # nezavislost na poradi vyberu (kombinace)
dvojice.append([x, y])
print(dvojice)
Vysledek:
Kód:
[['aa', 'bb'], ['aa', 'cc'], ['aa', 'dd'], ['aa', 'ee'], ['bb', 'cc'], ['bb', 'dd'], ['bb', 'ee'], ['cc', 'dd'], ['cc', 'ee'], ['dd', 'ee']]
EDIT:
Nejjednodussi bude asi pouziti knihovny:
Kód:
zadani = ["aa", "bb", "cc", "dd", "ee"]
dvojice = itertools.combinations(zadani, 2)
for i in dvojice:
print(i)
A jak se dozvime z dokumentace,t ak tato funkce dela presne nasledujici:
http://docs.python.org/library/itert...tool-functions
Kód:
def combinations(iterable, r):
# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
pool = tuple(iterable)
n = len(pool)
if r > n:
return
indices = range(r)
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(r)):
if indices[i] != i + n - r:
break
else:
return
indices[i] += 1
for j in range(i+1, r):
indices[j] = indices[j-1] + 1
yield tuple(pool[i] for i in indices)
Coz by mohl byt optimalni algoritmus, kdyz uz je v knihovne.
-
Re: Obecne kombinace
vrele diky, k+, zkusim to narvat do labview :-D
-
1 Příloh-a(y)
Re: Obecne kombinace
tak v labview to nejde a i kdyz zchroustne jakys takys Matlab kod, tak se mi nedari uz nekolik dnu tento python kod prepsat do matlab kodu :-D
EDIT: Dnes jsem k tomu sedl a nakonec jsem to zvladl i v tom Labview