17. juni 2001 - 13:40Der er
10 kommentarer og 2 løsninger
Stakke og køer
jeg sidder og læser til examen.. en stak eller kø kan implementeres som et array eller en hægtet liste.. det jeg ikke fatter er: Hvad er det smarte ved at lave man en stak eller kø som et array eller hægtet liste. jeg mener laver man en stak kan man jo kun udtage værdierne i en vis række følge (LIFO) eller (FIFO) jeg ser bare køer og stakke som en måde at begrændse et array på.. for har man et almindeligt array kan man jo sagtens udtage værdier eller slette værdier midt i arrayet ved hjælp af indexet.. eller pointeren i en normal hægtet liste... HVAD ER DET SMARTE UGH (jeg har exame kvider) heh håber der er noget der kan hjælpe-..
Manuelle og semi-automatiske strategier for identitetsstyring virker - lige indtil nogen beder om dokumentation. For at undgå denne fare har DKTV taget kontrol over sin identitets- og adgangsstrategi.
Hvis der er en der osse kan komme med et pragt examplar af et exempel på en funktion hvor det ville være MEGET smartere at bruge rekursion frem for en almindelig løkke.. jeg kan ikke rigtigt komme frem til et selv :)
Det smarte ved en kø er bla., at man kan lave en producer/consumer. Dvs. et objekt der producerer data, og et objekt der forbruger data. Feks. en Printer-kø. En printer-kø bør altid være FIFO, og derfor er data-strukturen \"en kø\" velegnet til at implementere dette.
Hvor er det bedre end et array eller en alm. hægtet liste????? Det er et godt spørgsmål, men det er nemmere at implementere en stak/kø end en liste, da der ikke er brug for traversering, dvs. det er hurtigere. Men du har ret->Det er en begrænsning af en liste.
Den helt store forskel mellem et array og en stak/kø, er jo at stakke/kø\'er (og også lister) er dynamiske hvor array er statiske.
Mht rekursion, så er QuickSort det bedste eksempel på en funktion der er nemmest at implementere rekursivt. Faktisk er den ret svær IKKE at implementere rekursivt. Andre eksempler kunne være fibonacci\'s talrække eller Pascals trekant.
damon, du har ganske ret, man kan sagtens udtage værdier fra et array efter hvilken metode man ønsker! Det der er relevant, når man implementerer en datastruktur, er nogle overvejelser omkring brugen heraf... Fordelen ved den arraybaserede implementation er fx hurtig tilgang (et array er jo i sin natur indexeret). Man KAN spare tid ved allokering, idét et array jo oftest allokeres for flere elementer ad gangen. Skal man dog ofte fjerne eller indsætte elementer, giver det en masse memory-management, idet alle elementer i arrayet skal reallokeres hver gang og det tager tid! En liste derimod fungerer jo således, at der allokeres memory for hver element. Hver element har så en pointer til næste element (og forrige, hvis det er en dobbelthægtet liste) Det fylder altså lidt mere i RAM (pga. pointeren) og er langsommere at søge igennem, da man altid skal starte fra enden! Til gengæld er der den fordel, at man let kan fjerne eller indsætte et element, da man ikke skal reallokere noget af det eksisterende.
=>kamikaze, lige et par kommentarer
\"En printer-kø bør altid være FIFO\" Hvorfor det? Mange operativsystemer anvender en kø der er prioritetsbestemt, således at det job med højeste prioritet bliver udført først (en administrator bør fx have mulighed for at ændre udskriftsrækkefølgen). En anden metode kunne være SJF (Shortest Job First). Hvis der fx er et 500 siders job der ligger før 10 jobs på hver én side, så ville man helt sikkert få en større brugertilfredshed ved at udskrive de 10 små jobs først!
\"array er statiske\" Nej, det passer ikke nødvendigvis. Et array kan sagtens være implementeret dynamisk...
Og så lige ang. rekursion: Det er en smart måde at lave noget lækkert og simpelt kode på, men hastigheden er ikke altid lige god, sammenlignet med sekventiel kode... En grund hertil er, at det ofte er svært for compileren at optimere rekursiv kode.
JPK>> <CITAT>Det er en smart måde at lave noget lækkert og simpelt kode på, men hastigheden er ikke altid lige god, sammenlignet med sekventiel kode... En grund hertil er, at det ofte er svært for compileren at optimere rekursiv kode.</CITAT>
En anden årsag til den dårligere hastighed er den overhead der opstår ved hver kald af funktionen. Et funktionskald tager jo også tid, fx. fordi variable skal gemmes på stakken og returneres når funktionen er afsluttet. Og i sagens natur har en rekursiv funktion [ofte mange] flere funktionskald end en iterativ funktion. Så en iterativ funktion vil altid være hurtigst, men en rekursiv vil typisk være nemmere eller \"smukkere\" at implementere...
pokemaster:> Du SKAL kun KOMMENTERE spørgsmål vedr. lukning, ikke svare på dem og derved få point på uærlig vis!
Synes godt om
Ny brugerNybegynder
Din løsning...
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.