13. juni 2007 - 12:34Der er
29 kommentarer og 1 løsning
Simple opgave - svær at løse!
Hej
Jeg skal have lavet noget dynamisk kode... Forestil dig at du har x-antal arraylister med x-antal string i hver arrayliste. Jeg skal have kørt alle string kombinationer igennem. Dvs. hvis der nu er 5 stk arralister med 10 strings i hver...ja så giver dette 10^5 = 100.000 kombinationer.
Jeg kunne selvfølgelig løse det "statisk" ved at lave 5 faste løkker, men idet at jeg gerne vil have at programmet skal være mere fleksibelt, så det også virker hvis der fx. en dag er 7 arraylister med hhv. 1,9,3,4,12,5,6 strings i...
Kan dette kun løses rekursivt? Jeg er i hvert fald ikke i stand til at lave koden selv pt...så håber meget i kan hjælpe mig!
det er da ikke dynamisk... koden skal virke lige meget hvor mange arraylister der er og ligemeget hvor mange string hver liste indeholder...dvs. man kender ikke antallet af løkker når man koder det...
I know...men tror ikke helt du forstår hvad jeg vil så....hvis jeg har 5 arraylister, med 10 strings i hver...så vil jeg køre alle kombinationer ígennem som indeholder en string fra hvér arrayliste...dvs. alle kombinationer vi i dette tilfælde indeholder 5 strings. Men idet at antallet af arraylister og strings variere, kender jeg ikke antallet af løkker på forhånd...og det er derfor jeg går kold...:)
Jeg har ingen kode, idet jeg ikke aner hvordan jeg skal lave det...tror stadig ikke at du forstår mig...? jeg har x-antal arraylister med x-antal strings i...data kommer fra x-antal forskellige filer...dvs. når jeg først har indlæst data fra div. filer til arraylisterne så ændres deres størrelse ikke.
eks.
fil1 indeholder:
hej goddag godaften
fil2 indeholder
Kurt Ole Hans
fil3 indeholder:
farvel vi ses ciao
Fil4 indholder
Julie Camilla Hans Thomas Ulrik
en kombination vil dermed se således ud : 1-1-1-1 : Hej Kurt farvel Hans. en anden kombinatione: 2-3-1-5 : Goddag Hans farvel Ulrik.
Der står et ord pér linie i hver txt fil jeg indlæser og ud fra dette indlæser jeg data til arraylisterne...MEN hele humlen ligger jo i, at jeg IKKE kender antallet af filer og hvor mange ord/linier hver fil indeholder og derfor heller ikke kender til antallet af arraylister og løkker som skal benyttes...you understand...? :)
hmm...ja det er noget lignende! Det må være det Arne V kalder permutationer idet jeg jo også KUN har interesse i kombinationer hvori et element fra HVER liste indgår!
Jeg kan dog stadig ikke helt gennemskue det...er der ikke en som er i stand til at lave en rekursiv metode, som gennemløber alle permutationer for x-antal lister som indeholder x-antal elementer?! det ville jeg virkelig sætte stor pris på!
if len( arrays ) == 1: return arrays[0] res = arraysProduct( arrays[1:] ) Res = [] for val1 in res: for val2 in arrays[ 0 ]: Res.append( val2 + " " + val1 )
hej Kurt farvel Julie goddag Kurt farvel Julie godaften Kurt farvel Julie hej Ole farvel Julie goddag Ole farvel Julie godaften Ole farvel Julie hej Hans farvel Julie goddag Hans farvel Julie godaften Hans farvel Julie hej Kurt vi ses Julie goddag Kurt vi ses Julie godaften Kurt vi ses Julie hej Ole vi ses Julie goddag Ole vi ses Julie godaften Ole vi ses Julie hej Hans vi ses Julie goddag Hans vi ses Julie godaften Hans vi ses Julie hej Kurt ciao Julie goddag Kurt ciao Julie godaften Kurt ciao Julie hej Ole ciao Julie goddag Ole ciao Julie godaften Ole ciao Julie hej Hans ciao Julie goddag Hans ciao Julie godaften Hans ciao Julie hej Kurt farvel Camilla goddag Kurt farvel Camilla godaften Kurt farvel Camilla hej Ole farvel Camilla goddag Ole farvel Camilla godaften Ole farvel Camilla hej Hans farvel Camilla goddag Hans farvel Camilla godaften Hans farvel Camilla hej Kurt vi ses Camilla goddag Kurt vi ses Camilla godaften Kurt vi ses Camilla hej Ole vi ses Camilla goddag Ole vi ses Camilla godaften Ole vi ses Camilla hej Hans vi ses Camilla goddag Hans vi ses Camilla godaften Hans vi ses Camilla hej Kurt ciao Camilla goddag Kurt ciao Camilla godaften Kurt ciao Camilla hej Ole ciao Camilla goddag Ole ciao Camilla godaften Ole ciao Camilla hej Hans ciao Camilla goddag Hans ciao Camilla godaften Hans ciao Camilla hej Kurt farvel Hans goddag Kurt farvel Hans godaften Kurt farvel Hans hej Ole farvel Hans goddag Ole farvel Hans godaften Ole farvel Hans hej Hans farvel Hans goddag Hans farvel Hans godaften Hans farvel Hans hej Kurt vi ses Hans goddag Kurt vi ses Hans godaften Kurt vi ses Hans hej Ole vi ses Hans goddag Ole vi ses Hans godaften Ole vi ses Hans hej Hans vi ses Hans goddag Hans vi ses Hans godaften Hans vi ses Hans hej Kurt ciao Hans goddag Kurt ciao Hans godaften Kurt ciao Hans hej Ole ciao Hans goddag Ole ciao Hans godaften Ole ciao Hans hej Hans ciao Hans goddag Hans ciao Hans godaften Hans ciao Hans hej Kurt farvel Thomas goddag Kurt farvel Thomas godaften Kurt farvel Thomas hej Ole farvel Thomas goddag Ole farvel Thomas godaften Ole farvel Thomas hej Hans farvel Thomas goddag Hans farvel Thomas godaften Hans farvel Thomas hej Kurt vi ses Thomas goddag Kurt vi ses Thomas godaften Kurt vi ses Thomas hej Ole vi ses Thomas goddag Ole vi ses Thomas godaften Ole vi ses Thomas hej Hans vi ses Thomas goddag Hans vi ses Thomas godaften Hans vi ses Thomas hej Kurt ciao Thomas goddag Kurt ciao Thomas godaften Kurt ciao Thomas hej Ole ciao Thomas goddag Ole ciao Thomas godaften Ole ciao Thomas hej Hans ciao Thomas goddag Hans ciao Thomas godaften Hans ciao Thomas hej Kurt farvel Ulrik goddag Kurt farvel Ulrik godaften Kurt farvel Ulrik hej Ole farvel Ulrik goddag Ole farvel Ulrik godaften Ole farvel Ulrik hej Hans farvel Ulrik goddag Hans farvel Ulrik godaften Hans farvel Ulrik hej Kurt vi ses Ulrik goddag Kurt vi ses Ulrik godaften Kurt vi ses Ulrik hej Ole vi ses Ulrik goddag Ole vi ses Ulrik godaften Ole vi ses Ulrik hej Hans vi ses Ulrik goddag Hans vi ses Ulrik godaften Hans vi ses Ulrik hej Kurt ciao Ulrik goddag Kurt ciao Ulrik godaften Kurt ciao Ulrik hej Ole ciao Ulrik goddag Ole ciao Ulrik godaften Ole ciao Ulrik hej Hans ciao Ulrik goddag Hans ciao Ulrik godaften Hans ciao Ulrik
bauerdata>> du har forstået hvad jeg vil...men kan du ikke lave en metode i C# som modtager en arrayliste som indeholder x-antal arraylister, som så igen indeholder a-antal strings?
Den som kan lave en C# metode, som modtager en arrayliste som indeholder x-antal arraylister, som hver igen indeholder x-antal strings? Får de 150 points!!
static void Main(string[] args) { Test t = new Test(); ArrayList[] al = new ArrayList[t.Listing.Count]; for (int i = 0; i < t.Listing.Count; i++) { al.SetValue(t.Listing[i], i); }
Hej Arne - gamle dreng ;) Mange tak for din kode! Den er fornuftig ud... :-) Min udviklings maskine er imidlertidigt ramt at virus, så er pt. igang med at fikse den. Jeg vender tilbage hurtigt muligt, når det hele er oppe og køre og jeg har fået afprøvet din kode...!
Det er korrekt, men alligevel kun en del af resultatet...jeg ønsker nemlig flere af de mulige kombinationer....rækkefølgende har nemlig også en betydning i dette tilfælde, Eks. DZ2, er ikke det samme som ZD2, Z2D, 2DZ og 2ZD...
Hvordan får jeg alle kobinationerne med? Husk blot på at der altid skal indgå ét element fra hvér liste...dvs. i dette tilfælde, skal alle kobinationer indeholde 3 tegn! Jeg ved godt, at jeg kaldte det permutationer...men det er åbenbart ikke det korrekte ord...kender ikke det korrekte ord for dette her...
Det er jo lidt en aendring i forhold til dit eksempel.
Jeg kan se 3 forskellige maader at loese det paa:
1) som i min kode ovenfor men hvor der kommer en metode ind imellem Permute og Processor som laver alle kombinationer 2) som i min kode ovenfor men hvor der kommer en metode ind imellem Main og Permute som laver alle kombinationer af lister 3) en klassisk permutatiosn algorime som i det link Mikkel fandt men hvor permutationer testes for om der er en fra hver liste
#!/usr/bin/env python # -*- coding: UTF-8 -*- import types def arraysProduct( arrays ): """Recursive returns product off arrays""" if len( arrays ) == 1: return arrays[ 0 ] res = arraysProduct( arrays[ 1: ] ) Res = [] for val1 in res: for val2 in arrays[ 0 ]: val2 = [val2 ] if type(val1) is types.StringType: val2.append( val1 ) else: val2.extend( val1 ) Res.append( val2 )
return Res
def permuteList( aList, bList=[] ): """ En lille effektiv recursiv funktion som returnerer en liste af permutationer af aList """ ret = [] if not len( aList ): return [ "".join( bList ) ] for i in range( len( aList ) ): bList.append( aList.pop( i ) ) ret.extend( permuteList( aList, bList ) ) aList.insert( i, bList.pop() ) return ret
Hej Arne kan du ikke lige lave det så den returnerer resultatet i stedet for at udskrive det. Det er meget nemmere at bruge hvis man kan få resultattet og spørge på indholdet.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.