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.