CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 1 (8) 2007-03-15 Datalogiska begrepp - liten ordlista för algoritmiker Avsikten med denna högst ofullständiga ordlista är att ge förklaringar till några datalogiska begrepp som kan vara svåra att hitta i en vanlig engelsk/svensk ordbok. Vissa av orden förklaras i Weiss bok, medan andra faller mellan stolarna; Weiss förutsätter att man kan dem, och de står inte i ordboken. Som sagt, listan är för kort, och den tar kanske upp några begrepp man kan leva utan. Förslag till förbättringar mottas tacksamt! Listan uppdateras ibland och en aktuell version finns på kursens webbplats. Adress En adress är ett datavärde, vanligen ett 32-bitars heltal, som anger positionen i minnet för ett dataobjekt. Adresser kan vara av olika typ, beroende på vilken typ av objekt de utpekar, man skiljer t.ex. mellan adresser till heltal och adresser till flyttal. (se pekare) ADT En Abstrakt DataTyp består av en datatyp (en mängd värden) samt en samling operationer som är giltiga för typen, t.ex. heltalen tillsammans med de aritmetiska operationerna. Typiska exempel är stackar, köer, träd, sökträd, hashtabeller, grafer, mänger. Dessa ADT:er skiljer sig åt genom de ingående elementens inbördes organisation, samt deras åtkomstsätt, t.ex. tas elementen i en kö ut i samma ordning som de sattes in (FIFO), medan de i en stack tas ut i omvänd ordning (LIFO). Abstrakta datatyper specificeras ofta logiskt genom ett antal axiom som beskriver operationernas beteenden. Beskrivningen av en ADT säger dock ingenting om hur datatypen representeras i en dator (se data structure, data type). Actual parameter Parameteruttryck i funktionsanrop, t.ex. x+1 och 7 i f(x+1,7) Algorithm Beräkningsschema, en mekanisk metod som i ett ändligt antal steg löser ett problem genom att använda elementära operationer Algorithmics Läran om algoritmer, speciellt deras tids- och rumskomplexitet Alias Ett objekt kan nås via flera olika namn, eller pekare, se även reference Allocation allokering, att skaffa minne för en variabel, statiskt eller dynamiskt Amortize amortera, om en operation tar lång tid att utföra, säg var tionde gång, men går snabbt de övriga nio, så kan kostnaden fördelas på alla tio och därmed bli låg totalt sett i det långa loppet. Array Fält (indexerad variabel) Arity Aritet, ställighet, antalet operander till en operator, t.ex. har - ariteten 2 i uttrycket x-y, och ariteten 1 i uttrycket -z. Assertion Påstående, utfästelse, spec. correctness assertion Assignment Tilldelning Atomicity Odelbarhet, man säger t.ex. att en operation är atomär om den antingen utförs i sin helhet, eller inte alls. Den kan alltså inte avbrytas halvvägs. Automatic variable Variabel som skapas, och försvinner, automatiskt, t.ex. formella värdeparametrar och lokala funktionsvariabler Average behaviour En algoritms genomsnittliga resurskrav (tid el. minne) Base case Basfall, fall som kan lösas direkt utan rekursiva anrop Base class Klassen längst upp i en arvshierarki Best case En algoritms minimala resurskrav (tid el. minne) [ordlista.doc] Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 2 (8) 2007-03-15 Binding bindning, vilket objekt ett namn knyts till, beroende på uttryckets dynamiska/statiska typ Binary search tree Binärt sökträd, ett ordnat träd som medger snabb insättning, sökning, och uttag av information. Black box I samband med datainkapsling avses det faktum att man utifrån ej kan se ett objekts interna detaljer, bara använda dess operationer. (se information hiding) Brute force Att lösa ett problem genom att genomsöka alla möjliga fall. Bugg Lus, skalbagge, fel i program eller hårdvara, uttrycket lär ha myntats på ENIAC:s dagar, en av de första stora elektronrörsdatorerna. En kortslutning i datorn visade sig ha orsakats av en kackerlacka som hamnat på tvären. Call by reference Referensanrop, den formella parametern är en referens till den aktuella parametern, som måste vara en variabel. Call by value Värdeanrop, den aktuella parameterns värde kopieras till den formella. Detta är den enda parameteröverföringsmetod som finns i Java. Class Klass, i vidare OOP-bemärkelse en beskrivning av en samling objekt med tillstånd (se state) och tillhörande operationer. I objektorienterade programspråk är klasser generaliserade posttyper, en posttyp (se structure) beskriver ju en samling aggregat av samhörande data, ofta av olika typer (se object). Klassbegreppet utvidgar detta till att även innefatta funktioner, vilket ger en kraftfull typbildningsmekanism. En abstrakt datatyp är en klass, men klassbegreppet innefattar mer, bland annat kan klasser härledas från andra klasser genom arv (se inheritance), en av OOP:s hörnpelare. Distinktionen mellan begreppen är dock en aning vag. (I datalogisk mening är klasser datatyper och arvshierarkierna i OOP motsvaras av typhierakier (subtyper).) (se OOP). Complexity Komplexitet, resurskrav som en funktion av storleken på indata, man pratar om tidskomplexitet (tidskrav) och rumskomplexitet (minnesbehov) Computer engineering Datorteknik Computer science (el. computing science) Datalogi, läran om algoritmer, programspråk, specifikationsmetoder, programkorrekthet, parallellism, programmeringslogik, artificiell intelligens, kompilatorteknik, distribuerade system, m.m. Concatenate Sätta samman, oftast om strängar: t.ex. är konkateneringen av de två strängarna ”abc” och ”def” strängen ”abcdef” Consequtive I följd, elementen i ett fält lagras t.ex. i tät följd i minnet Constructor Konstruktor, funktion som initierar ett nyskapat dataobjekt med värde Copy constructor En konstruktor som initierar ett nyskapat objekt med innehållet i ett annat objekt Data abstraction Dataabstraktion, separering av en datastrukturs interna detaljer från dess abstrakta användning, (se datastruktur, ADT, information hiding) Data encapsulation Datainkapsling, gruppering av data och tillhörande operationer till en sammanhängande enhet (se ADT, data abstraction, data structure) Data independent En operation är dataoberoende om dess beteende inte påverkas av datatypen, t.ex. innebär operationen att byta plats på två dataobjekt samma sak oavsett om objekten är heltal, flyttal, strängar, ... (se swap, generic) [ordlista.doc] Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 3 (8) 2007-03-15 Data structure Representation av data, tillsammans med operationer. En datastruktur är en konkret implementering av en abstrakt datatyp (se ADT), t.ex. kan den abstrakta datatypen kö (First-in-first-out) representeras i en dator på olika sätt: som ett fält, eller en länkad lista. I moderna högnivåspråk konstrueras datastrukturer med hjälp av de mekanismer för datainkapsling som finns i programmeringsspråket (se data encapsulation och information hiding). Data type En mängd värden som en variabel kan anta. Definitionen av en datatyp säger ej nödvändigtvis vilka operationer som är giltiga för den nya typen (se ADT). Deallocation Avallokering, att frigöra minne för återanvändning. Deep copy kopiering som sker ”fullt ut” genom att följa alla pekare. Ex. vid grund kopiering (se shallow copy) av en sko får man ett nytt skosnöre som leder till samma sko som man började med, medan en djup kopiering dessutom ger en helt ny sko. (Det är oklart om kopiering av en vänstersko ger en högersko och vice versa.) Default Standardvärde, standardförfarande (svårt att översätta) Dereference Avreferera, operationen att ta fram det som en pekare pekar på (*ptr) Destructor Destruktor, en medlemsfunktion som städar upp när ett dataobjekt försvinner, innebär vanligen återvinning av dynamiskt allokerat minne. (Se memory leak). Divide and conquer Söndra och härska, rekursiv problemlösningsteknik där problemet först bryts ner i avsevärt mindre delproblem (divide), varefter lösningarna av delproblemen sätts samman till en lösning av hela problemet (conquer). Dynamic binding Den dynamiska typen bestämmer bindningen vid exekveringen Dynamic type Ett uttrycks typ vid exekveringen Elementary operation En operation som är väl avgränsad i tid och rum, ofta implementerad i hårdvara, t.ex. grundläggande aritmetiska operationer (+ - * /). Encapsulation Inkapsling, att gruppera data av viss typ med tillhörande operationer så att endast dessa operationer kan användas för att manipulera dataobjekt av typen i fråga. (se ADT) Exception Undantag, avbrott i händelse av fel, Java, C++, Ada m.fl. innehåller konstruktioner för detta. Exhaustive search Uttömmande sökning, undersökning av alla alternativ. FIFO First in, first out, typiskt beteende för en kö (vanligen ej busskö) (jfr LIFO) Formal parameter Variabel i en funktionsdefinitions parameterlista, kan i C++ vara värdeparameter som innehåller en kopia av den aktuella parameterns värde (argumentet), eller referensparameter som är en referens till den aktuella parametern, som alltså kan ändras. Generic Generisk, en generisk funktion är en funktionsmall som är parametriserad med avseende på en eller flera datatyper. Vid anropet instansieras typen beroende på vilka argument funktionen appliceras på. Generiska funktioner används för att generalisera funktioner som har ett dataoberoende beteende. T.ex. kan en generisk sorteringsrutin sortera heltal, flyttal, strängar, ... Även klasser kan vara generiska, t.ex. kan man definiera en generisk stackklass så att man kan definiera olika stackar av heltal, flyttal, strängar, etc. Greedy algorithm Snål algoritm, en algoritm är snål om den väljer den för tillfället billigaste vägen, vilket ibland kan bli dyrt på sikt. [ordlista.doc] Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 4 (8) 2007-03-15 Hash table En datastruktur som medger mycket snabba insättningar och uttag av information, h.t. är dock mindre lämplig för att skriva ut informationen i ordning, eller att ta ut det minsta elementet. (se binary search tree, priority queue). Identifier Identifierare, en textsträng i ett programmeringsspråk som namnger något. I de flesta språk kan identifierare innehålla bokstäver, siffror samt tecknet ‘_’, med restriktionen att identifierare inte får inledas med en siffra. T.ex. innehåller uttrycket A[ _ipos ] = x0 identifierarna ‘A’, ‘_ipos’, ‘x0’. Implement Implementera, förverkliga, i vidare mening att realisera en kravspecifikation i form av ett datorprogram. Specifikationen anger vad programmet skall kunna, implementeringen definierar hur det fungerar i detalj. Implementering av en datastruktur innebär att välja datarepresentation samt konstruera funktionerna som är definierade för strukturen (se Datastruktur). Information hiding Genom att dölja en datastrukturs datarepresentation och tillhörande operationers algoritmer får man en klar separering mellan interna implementeringsdetaljer och strukturens användning, som sker enbart via de exporterade (publika) operationerna. Detta är en nödvändig förutsättning för att senare kunna ändra representation utan att behöva ändra i programkoden som använder strukturen. Sensmoral: ”Bättre att ändra i ett program i handen, än i hundra på stan”. Inheritance Arv. Inorder Noderna i ett träd besöks inorder genom att först besöka vänster delträd inorder, därefter rotnoden, och sist höger delträd inorder. (se nod, preorder, postorder) Interface Gränssnitt, gränsyta, de tjänster som ett system erbjuder användaren. I en datastruktur består gränsytan av de publika operationerna. På en telefon är det knapparna och luren. Intuition 95% önsketänkande, 5% tur Invariant Ett logiskt påstående som uttrycker en säkerhetsegenskap som alltid är uppfylld på ett visst ställe i ett program, t.ex. en loopinvariant. En loopinvariant kan t.ex. uttrycka att en indexvariabel alltid håller sig inom gränserna vid genomlöpning av ett fält. Iterate Upprepa, vanligen upprepad beräkning i en loop Iterator ”Upprepare”, används för att uppnå enhetlig genomlöpning och hantering av olika datastrukturer, som t.ex. listor och träd. Man kan t.ex. genomlöpa en länkad lista med en for-loop på samma enkla sätt som man genomlöper ett fält. (används flitigt i Weiss bok, en mer standardmässig teknik beskrivs i Skansholm). lexical symbol En grupp av tecken som tillsammans bildar en symbol i ett språk, t.ex. <= , int, allan, //, ”tjohej” (en strängkonstant) LIFO Last in, first out, typiskt beteende för en stack, t.ex. tallriksställ (jfr FIFO) Lvalue ”Vänstervärde”, i t.ex. tilldelningen x = x + 1; spelar x olika roller till vänster resp. till höger om tilldelningsoperatorn. Den vänstra förekomsten evalueras till minnescellen som har namnet x, medan den högra evalueras till värdet som ligger lagrat i cellen ifråga. I uttrycket a[i] = a[i] + 1 är a[i] faktiskt ett uttryck ([] är en operation) som beräknas till den i:te komponenten i a. I C++ kan man både skriva funktioner som returnerar vänstervärden, och sådana som returnerar högervärden. Man kan t.ex. [ordlista.doc] Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Member Memory leak Message Method Node Object OOP Overhead Overloading Parsing Pointer Polymorphism Postcondition [ordlista.doc] Ordlista 5 (8) 2007-03-15 definiera funktionen int & f(int a[],int i) {return a[i];} och sedan anropa den till vänster om tilldelningsoperatorn: f(a,7) = 3; tilldelar det sjunde elementet värdet 3, eftersom f returnerar en referens till den cellen. (se t.ex. överlagringen av [] i klassen String i Weiss bok) Medlem, en komponent i ett objekt, kan vara en datamedlem (variabel) eller en funktionsmedlem. (se class) Minnesläcka, om man glömmer att avallokera dynamiskt minne kan det leda till att minnet tar slut och programkrasch. (se destructor) Att anropa en metod i ett objekt kallas i OOP ofta att ”skicka ett meddelande” till objektet Funktion, i OOP Nod, en punkt i en länkad lista, träd, eller graf. Noder förbinds med riktade eller oriktade bågar, beroende på vilken struktur det gäller. I vidare mening en namngiven eller anonym minnesarea, t.ex. variabel, namngiven konstant, variabel som är dynamiskt allokerad via pekare, eller temporär automatiskt genererad (anonym) minnesarea i samband med funktionsanrop eller funktionsretur. I OOP avses ofta dessutom med objekt en instans av en klass (= värde av en typ, vilket delvis är samma sak som ovanstående). ObjektOrienterad Programmering, ”motsatsen” till procedurorienterad. Enligt det objektorienterade synsättet är ett program (och till och med ”verkligheten”!) uppbyggt av objekt som kommunicerar med varandra genom att skicka meddelanden (se message). Ett objekt innehåller data - objektets tillstånd, och har operationer (se data encapsulation). Vid OOP utvecklas programmet genom att definiera klasser av objekt (se class). Man kan ofta modellera verklighetens objekt som motsvarande objekt i programmet, t.ex. kortläsare, knappsats och display i en bankomat. OOP sägs av förespråkarna leda till kortare utvecklingstider samt bättre möjligheter att återanvända programkod, jämfört med traditionell procedurorienterad programutveckling. (se procedure oriented). ”Extrakostnad per enhet” i form av minne eller tid. Om man t.ex. lagrar en följd av namn i ett teckenfält om 100 positioner per namn, och namnen är i genomsnitt 20 tecken långa, så utgör det extra minnesutrymmet på i snitt 80 positioner per namn rent spill. Problemet kan lösas genom att allokera minne dynamiskt efter behovet för varje enskilt namn, dock inte helt utan spill, eftersom man då får en extrakostnad i form av en pekare för varje namn. Överlagring, flera funktioner med besläktad funktionalitet men olika parametertyper kan dela samma namn. Kallas även statisk polymorfism. Syntaxanalys, t.ex. den inledande analysen av programtexten som utförs i en kompilator. Resultatet blir en intern representation av programmet t.ex. ett syntaxträd, eller en lista med felutskrifter (se syntax) Pekare, en variabel som kan innehålla en minnesadress. (se adress) Mångformighet, ”ett interface, flera metoder”, t.ex. vid överlagring och dynamisk bindning. Eftervillkor, ett logiskt påstående som garanterar egenskaper hos utdata från en algoritm, alltså vad vi kan kräva av algoritmen. Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 6 (8) 2007-03-15 Postorder Noderna i ett träd besöks postorder genom att först besöka vänster delträd postorder, därefter höger delträd postorder, och sist rotnoden. (se nod, preorder, inorder) Precedence Precedens, om operatorer, t.ex. har * högre precedens än + om uttrycket 1+2*3 tolkas som 1+(2*3) Precondition Förvillkor, ett logiskt påstående som uttrycker krav på indata för att en algoritm skall kunna ge korrekt resultat (uppfylla eftervillkoret), alltså vad algoritmen kräver av oss. Preorder Noderna i ett träd besöks preorder genom att först besöka rotnoden, därefter vänster delträd preorder, och sist höger delträd preorder. (se nod, inorder, postorder) Priority queue Prioritetskö, datastruktur som medger snabb insättning, samt snabbt uttag av minsta elementet, kan användas för effektiv sortering. Procedure Procedur, funktion som inte returnerar något värde, tex. void f(...); Procedural oriented Procedurorienterad, ”motsatsen” till OO. Enligt det procedurorienterade synsättet är ett program uppbyggt av funktioner som behandlar data, man kan säga att datavärdena flödar genom funktionerna - som alltså står i centrum. Data och funktioner är i denna modell separerade (jämför med ett vanligt C-program där variablerna deklareras på ett ställe och funktionerna på ett annat). I detta sammanhang utvecklas ofta program genom s.k. stegvis förfining (se top down) av ett antal funktioner (se OOP) Pseudo code Att beskriva en algoritm i en programspråksliknande informell notation. Recursion hypothesis rekursionsantagande, att anta att ett rekursivt funktionsanrop löser ett enklare problem av samma slag Recursive Rekursiv, funktion som anropar sig själv, sig själv, sig själv, sig själv, ... Reference I Java ett alternativt namn på pekare. Routine Rutin, procedur, subrutin, underprogram, funktion (utan returvärde) Rvalue Högervärde (se lvalue) Scope Deklarationsområde, området i ett program där en deklaration ”gäller” Semantics Semantik, betydelsen av en språkkonstruktion, eller ett helt språk Shallow copy Grund kopiering, innebär att pekare kopieras men inte det som utpekas av dem (jfr deep copy). Signature En funktions namn tillsammans med de formella parametrarnas typer (parameterprofilen). Begreppet varierar något beroende på programspråk. Space complexity En algoritms minnesbehov som en funktion av storleken på indata. Specification En beskrivning av vad ett datorprogram, eller del av program, skall göra (se implement) State Tillstånd, programtillstånd: Det samlade innehållet i ett programs variabler annars avses i detta sammanhang innehållet i ett enskilt dataobjekts interna datamedlemmar. (se member, object, encapsulation, OOP) State machine Tillståndsmaskin, en maskinmodell där man tänker sig en maskin som registrerar händelser och växlar mellan olika tillstånd, beroende på vilka händelser som inträffar. T.ex. kan man konstruera en tillståndsmaskin som håller reda på hur många personbilar i följd som nyligen passerat en viss plats. Maskinen har fyra tillstånd, START: inget fordon har passerat ännu, A: en personbil har just passerat, B: ett annat fordon har just passerat, SLUT: alla fordon har passerat och observationen avbryts. I maskinen finns också en tillståndsvariabel ANTAL. Maskinen startar i tillståndet START. Om det kommer en personbil sätts ANTAL till ett [ordlista.doc] Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] Ordlista 7 (8) 2007-03-15 och maskinen övergår till tillståndet A, är det ett annat fordon sätts ANTAL till noll och maskinen övergår istället till tillståndet B. Om maskinen befinner sig i tillståndet A och det kommer en personbil, så ökas ANTAL med ett och maskinen stannar i tillståndet A, kommer det däremot ett annat fordon så skrivs ANTAL ut varefter den nollställs och maskinen övergår till tillståndet B. Om maskinen befinner sig i tillståndet B och det kommer en personbil, så sätts ANTAL till ett och maskinen övergår till tillståndet A, kommer det ett annat fordon stannar maskinen i B-tillståndet. I samtliga tillstånd gäller att försöket kan avbrytas, och maskinen går då till tillståndet SLUT (om det var i tillstånd A skrivs ANTAL ut först). Detta fortgår till tidens ände eller bensinen tar slut. Maskinens beteende kan definieras med följande övergångstabell: Tillstånd START A B Händelse Åtgärd personbil ANTAL = 1 annat fordon ANTAL = 0 avbryt personbil ANTAL++ annat fordon skriv ANTAL; ANTAL = 0 avbryt skriv ANTAL personbil ANTAL = 1 annat fordon avbryt Nästa tillstånd A B SLUT A B SLUT A B SLUT SLUT Static binding Static type Static method Static variable Structure Swap Syntax Template Terminate Time complexity Toggle Token Traversal User [ordlista.doc] Den statiska typen bestämmer bindningen vid exekveringen (se binding) ett uttrycks typ vid kompileringen En metod som anropas för klassen och inte för ett specifikt obekt. I metod: variabel som finns kvar i minnet mellan anropen, i klass: en datamedlem som bara finns i en upplaga och delas av alla objekt av klassen. Post, ett aggregat av samhörande datakomponenter, ofta av olika typ, i OOP generaliseras postbegreppet så att även funktioner kan ingå. (”record” i språken Pascal och Ada, ”struct” eller ”class” i C++, ”class” i Java) Byt plats på två objekt, operationen är dataoberoende, se data independence En språkkonstruktions, eller helt språks formmässiga uppbyggnad Mall (se generic) Terminera, stanna En algoritms tidskrav som en funktion av storleken på indata. Ändra läge mellan två tillstånd, t.ex. en tryckströmbrytare där vartannat tryck tänder ljuset och vartannat släcker Lexikal symbol i programtext, tex. ”sin”, ”(”, ”x”,”+”, ”*”och ”)” i uttrycket sin(x+(2*3)) (se lexical) Genomlöpning (besök) av noderna i en datastruktur. (se nod, inorder, postorder, preorder) Med användare av t.ex. en datastruktur avses den som skriver programkod som utnyttjar datastrukturen, inte användaren av slutprodukten. Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3 CHALMERS Institutionen för data- och informationsteknik ©2007 Uno Holmer [email protected] WYGIWYD WYSIWYG Worst case Wrap around Z [ordlista.doc] Ordlista 8 (8) 2007-03-15 What You Get Is What You Deserve, om man använder ett dåligt verktyg när det finns ett bättre. What You See Is What You Get, egenskapen hos t.ex. ett textredigeringsprogram att slutresultatet på papper överensstämmer med vad som visas på skärmen. värsta-fall-komplexitet, en algoritms maximala resurskrav (tid el. minne) som en funktion av storleken på indata. ”fortsätt från början igen”, t.ex. när man kommer till slutet av ett fält vid cyklisk genomlöpning En specifikationsformalism som används bl.a. i telekombranschen. ... samt i den här ordlistan för att få med något på Z ☺ Algoritmer och datastrukturer, LET375 0105, DAI2+I3, 06/07, lp IV Nr 3