TDDI16: Datastrukturer och algoritmer
|
|
- Kristina Bengtsson
- för 6 år sedan
- Visningar:
Transkript
1 . TDDI16: Datastrukturer och algoritmer Lab 2: Knäcka lösenord Höstterminen
2 1 Upplägg Första delen av instruktionen, avsnitt 2 till 7, innehåller en fullständig beskrivning av problemet utan några konkreta lösningsidéer. Känner ni att ni har en bra idé redan efter att ha läst första delen kan ni börja programmera redan då. Fyll i filen readme.txt och läs och fundera på frågorna i avsnitt 8 och 10 innan ni redovisar laborationen för assistent. Resten av instruktionen innehåller en mer ingående beskrivning av de givna filerna (avsnitt 9), ytterligare exempel av subset sum (avsnitt 11), lite tips för testning (avsnitt 12 och 13), en introduktion till meet in the middle (avsnitt 14) och slutligen en lösningsidé (avsnitt 15 och 16). 2 Hantering av lösenord När du loggar in på ett system (exempelvis IDA:s Linuxdatorer) måste systemet kontrollera att det inmatade lösenordet stämmer överens med vad systemet förväntade sig, för att på så sätt kontrollera om du är den du utger dig att vara. En enkel implementation av detta skulle vara att lagra alla användarnamn och lösenord i klartext någon stans i systemet (exempelvis i filen /etc/passwd, eller /etc/shadow). Detta är dock en mycket dålig idé eftersom lösenorden för alla användare blir tillgängliga ifall någon obehörig skulle få tillgång till systemet (som vi alla vet är det lätt att använda samma lösenord på flera ställen, och därmed är det viktigt att vara extra försiktig med hanteringen av lösenord). Det vi kan göra för att lösa problemet är att använda en hashfunktion (gärna en så kallad kryptografisk hashfunktion). En hashfunktion är en funktion, h(x), som krypterar x på ett sådant sätt att vi utifrån h(x) inte enkelt kan beräkna x igen. Vi kan alltså inte hitta en invers, h 1 (y), som går att beräkna inom rimlig tid. I och med att vi inte enkelt kan avhasha lösenorden som vi en gång har hashat, så blir användarnas lösenord säkrare: även om filen med alla hashade lösenord skulle hamna i fel händer så skulle inte denna person enkelt kunna läsa lösenorden i filen. Trots att vi har hashat alla användarnas lösenord kan vi ändå kontrollera om lösenordet var korrekt. När vi vill kontrollera ett lösenord kan vi helt enkelt hasha det lösenord som vi vill kontrollera och jämföra den hashen mot hashen som är lagrad i filen. Är de lika så vet vi (i alla fall med hög sannolikhet, det kan finnas kollisioner) att lösenordet stämmer överens med det riktiga lösenordet, och då kan vi släppa in användaren i systemet. 3 Subset sum för hashning av lösenord I den här labben kommer vi använda hashfunktionen subset sum för att hasha lösenorden. För enkelhets skull antar vi att lösenorden består av tecknen 0 och 1, och alltid är en viss längd, säg N. Systemet har också en tabell, T, som används som en nyckel för hashfunktionen. Tabellen består av N heltal numrerade från 0 till N 1, vart och ett N bitar långa. För att hasha ett lösenord väljer systemet en delmängd av raderna i T motsvarande de positioner i lösenordet som innehåller tecknet 1 och summerar dem. Summan är hashvärdet för lösenordet. Följande exempel illustrerar processen. Antag att vi ska hasha lösenordet med hjälp av följande tabell: 1 / 8
3 ID Innehåll Lösenordet innehåller två 1:or, på plats nummer 2 och 4 (kom ihåg, vi börjar räkna från 0), alltså väljer rad 2 och 4 från tabellen (vilket kan ses i kolumnen lösenord här nedanför). Sedan summerar vi de valda raderna för att få hashvärdet. I detta fall blir det = I praktiken skulle såklart en mycket större tabell och längre lösenord användas. ID Innehåll Lösenord Valda rader Summa: Uppgiften Du har fått tag på tabellen T från ett system tillsammans med en uppsättning användarnamn och hashade lösenord. Eftersom de hashade lösenorden inte är särskilt användbara vill du såklart hitta ett sätt att beräkna lösenorden från hasharna igen, helst inom rimlig tid. Systemet använder subset sum för att hasha lösenorden. För att göra det enkelt för användarna tillåts tecknen a-z och 0-5 i stället för bara 0 och 1 som i exemplet ovan. I och med att det finns precis 32 tillåtna tecken kan varje tecken översättas till fem bitar. a kodas som 00000, b kodas som 00001, c som och så vidare. Ett lösenord som består av C tecken består alltså av N = 5C bitar, och tabellen som används för ett sådant lösenord innehåller således också N = 5C rader. Ett lösenord med 5 tecken behöver alltså en tabell som innehåller 25 rader. Ett första försök att lösa problemet är att helt enkelt testa att hasha alla möjliga lösenord, ett efter ett, och se vilka som ger samma hashvärde som det vi hittade i systemet. Koden för detta finns i filen brute.cpp, men problemet är att programmet tar oerhört lång tid på sig att hantera lite längre lösenord. Din uppgift är att skapa ett nytt program, decrypt, som förbättrar brute så att det kan klara av ett lösenord på 10 tecken inom 400 sekunder (mätt på IDA:s datorer, notera att ThinLinc-servern är något långsammare än datorerna i datorsalarna på den här typen av beräkningar). Notera: Beroende på innehållet i T, så kan det finnas flera olika lösenord som producerar samma hashvärde. Ditt program ska i sådana fall hitta alla sådana lösenord. Notera: Ditt program kommer behöva den abstrakta datatypen symboltabell. Du ska använda en hashtabell (std::unordered_map) för att realisera denna. Det innebär att du måste implementera en egen hashfunktion för Key för att kunna använda den som nyckel. Mer information om detta finns på https: //en.cppreference.com/w/cpp/utility/hash 5 Indata Längden på lösenord ändras genom att specifiera ett värde på konstanten C i filen key.h. Programmet ska fungera för alla C i intervallet 1 C 10. Programmet ska läsa det hashade lösenordet från kommandoraden 2 / 8
4 (argv[1]), och tabellen T ska läsas in från standard input. Tabellen består av ett ord på varje rad, där den första raden motsvarar bit 0 i lösenordet, nästa rad bit 1 och så vidare. Inläsning av data hanteras av det givna kodskelettet. Programmet anropas lämpligtvis enligt följande för att inte behöva skriva in tabellen manuellt varje gång programmet körs (njjbh är lösenordet pass hashat med tabellen easy5.txt):./decrypt njjbh < easy5.txt 6 Utdata Programmet ska skriva ut alla lösenord som producerar det givna hashvärdet med den givna tabellen, ett möjligt lösenord på varje rad. Lösenorden ska skrivas ut på det formatet som utmatningsoperatorn för datatypen Key producerar. Utdatan ska avslutas med en text som indikerar den totala tidsåtgången för programmet (detta görs av den givna koden). Exempelvis ska körningen decrypt njjbh < easy5.txt producera följande utdata (ordningen på raderna spelar ingen roll): passw p3csw p35cw p355g dcsw d5cw d55g qssw Decryption took 0 seconds. 7 Testfall Följande lösenord har krypterats med rand8.txt, rand10.txt och rand12.txt respektive. När du har löst problemet ska ditt program åtminstone klara av lösenorden med 10 tecken: xwtyjjin h554tkdzti uz1nuyric5u3 rpb4dnye oykcetketn xnsriqenxw5p kdidqv4i bkzlquxfnt 4l4dxa3sqwjx m5wrkdge wixxliygk1 wuupk1ol3lbq 8 Att tänka på innan ni redovisar Hur delar ni upp tabellen? Vilka olika uppdelningar har ni testat? Vilken eller vilka fungerar bäst? Hur har ni konstruerat hashfunktionen som ni använder till er hashmap? Kan den förbättras på något sätt? Vad har er lösning för tidskomplexitet? Är den bättre än brute? 3 / 8
5 9 Givna filer Följande filer är givna för labben: key.{h,cpp} Innehåller en implementation av datatypen Key, som används för att lagra lösenord och hashade lösenord i en representation som kan manipuleras som vanliga heltal. Key representerar lösenordet som ett tal av längd C i bas 32. Alla beräkningar sker modulo 2 N, så om talet 5555 ökas med ett slår talet runt och resultatet blir aaaa. encrypt.cpp Innehåller ett program som kan användas för att hasha lösenord. Programmet används på samma sätt som de andra programmen i labben. Det vill säga, för att hasha ett lösenord med tabellen easy5.txt körs encrypt enligt följande:./encrypt passw < easy5.txt Programmet producerar då följande utdata: passw aaaac aaaae aaaai aaaaz aabaa aaiaa abaaa aiaaa baaaa eaaaa iaaaa njjbh Första raden är det lösenord som angavs på kommandoraden, utskrivet i tre olika representationer: först med text som vanligt, sedan skrivs ordningsnumret för varje bokstav ut, och till sist skrivs den binära representationen ut. Nästkommande rader har en siffra framför sig. Var och en av dessa motsvarar en rad i tabellen som har valts ut av lösenordet. I det här fallet har raderna 1, 2, 3, 4, och så vidare valts ut eftersom bit 1, 2, 3, 4 och så vidare var 1 i lösenordet. Den sista raden är summan av alla rader som valdes ut, och därmed det slutgiltiga hashvärdet. brute.cpp Innehåller ett program som implementerar en möjlig lösning på problemet genom att testa alla möjliga lösenord och därigenom se vilka som är korrekta. Problemet med detta program är att det tar otroligt lång tid på sig att knäcka ett lösenord. I övrigt fungerar programmet som programmet decrypt ska fungera. decrypt.cpp Innehåller ett kodskelett som sköter in- och utmatning till den lösning som ni ska producera. I nuläget gör programmet ingenting utöver att läsa in all indata och skriva ut den totala tidsåtgången. Makefile Innehåller regler för att kompilera den givna koden. Kör make för att kompilera alla givna filer, eller make encrypt, make decrypt eller make brute för att kompilera enskilda program. easy*.txt Innehåller tabeller med relativt tydliga mönster som kan vara användbara under testning, eftersom det är relativt enkelt att lista ut vilka rader som valts manuellt. Siffran i namnet anger vilken lösenordslängd tabellen är avsedd för, räknat i tecken. Filen easy5.txt innehåller alltså en tabell för 5 tecken långa lösenord, det vill säga 25 rader. 4 / 8
6 rand*.txt Innehåller tabeller med slumpmässiga rader. Den här typen av data vill vi använda när vi hanterar riktiga lösenord. I och med att raderna innehåller slumpmässiga tal kommer det inte finnas särskilt många mönster som kan utnyttjas för att förenkla dekrypteringen. 10 Att tänka på i praktiken I den här labben har vi sett att den hashfunktion vi valde för att lagra lösenorden inte var särskilt säker. Vilka egenskaper har hashfunktionen som ni kan utnyttja för att knäcka den? Baserat på detta, om vi ska välja en hashfunktion som är säker för att lagra lösenord. Vilka egenskaper ska vi då leta efter? Vad har brute för tidskomplexitet? Vad har decrypt för tidskomplexitet? Vad gör decrypt för att bli så mycket snabbare? Vad kan vi göra för att även decrypt ska ta tillräckligt lång tid på sig för att det ska bli ohållbart att dekryptera lösenorden på detta sätt? 11 Ytterligare exempel av hasningen I det här exemplet hashar vi lösenordet password med tabellen rand8.txt. Detta kan göras med hjälp av det givna programmet encrypt genom att köra:./encrypt password < rand8.txt Programmet kommer då att skriva ut följande text: password gobxmqkt qdrvjxwz joobqxtz xnoixmnk tcixtvem lqtsdtca zlptzlfp gmjuvyqw uoqrdhwp ltdkzndz btezrznq bujilqno qgaicljl yyefwcld gnvowyjk aynzobxh lxwewfhh aenipbjd vbskbezp På första raden skriver programmet ut originallösenordet i tre olika representationer. Först i ren text, sedan som 8 heltal mellan 0 och 31 som motsvarar tecknens ordningsnummer. Till sist skrivs den binära representationen ut, vilket är väldigt användbart för hashningen, eftersom den binära representationen anger vilka rader i tabellen som ska summeras. 5 / 8
7 Programmet anropar sedan funktionen subset_sum, som itererar igenom alla bitar i talet och väljer de rader som innehåller en 1:a. I det här fallet kan vi se att password innehåller 18 1:or, och därför väljs 18 rader från tabellen i rand8.txt. Programmet skriver ut de valda raderna tillsammans med radens nummer, vilket gör att vi kan se att raderna 1, 2, 3 och 4 är valda eftersom att bit 1, 2, 3 och 4 är satta till 1 i talet. Den sista raden i utdatan är summan av alla raderna, vilket är det hashade lösenordet. 12 Tips för testning Börja testa med små nyckelstorlekar, exempelvis 6 tecken för att se att din lösning fungerar. Då är problemen tillräckligt små så att du kan jämföra utdatan för decrypt med utdatan för brute för att se att du har fått med alla möjliga lösenord. Testa också att generera egna lösenord! Lösenord med många a:n kan vara problematiska ibland. 13 Datatyper Trots att vi lagrar all vår data som datatypen Key har vi faktiskt två olika typer av data i våra program. Först och främst har vi datatypen lösenord, vilket motsvarar ett lösenord i klartext, exempelvis password. Utöver det har vi också datatypen hashat lösenord, vilket är alla resterande tal. Även om dessa datatyper båda representeras av typen Key i C++ så är det viktigt att hålla dem åtskiljda när vi tänker på problemet eftersom det är olika operationer som är meningsfulla att göra på dem. Datatypen lösenord vill vi se som en serie bitar snarare än ett heltal. När vi hashar ett lösenord är vi bara intresserade av vilka bitar som är satta så att vi kan välja lämpliga rader i tabellen. Det är sällan intressant att betrakta lösenord som tal och exempelvis subtrahera ett lösenord från ett annat. Det är helt enkelt inte meningsfullt eftersom vi betraktar lösenorden som en sekvens av bitar. Med det sagt, så kan man ibland behöva använda aritmetik för att manipulera bitarna i talet på ett bra sätt, vilket beskrivs i avsnitt 16. Kort sagt skulle man kunna säga att ett lösenord beskriver vilken delmängd av raderna i tabellen som ska väljas (därav namnet subset sum). Datatypen hashat lösenord, å andra sidan, vill vi betrakta som ett tal eftersom att hashade lösenord är en summa av tal från tabellen. På grund av det är det intressant att prata om summan eller differensen mellan två hashade lösenord. Däremot är det inte intressant att se om en viss bit är satt i ett hashat lösenord. 14 Meet in the middle Meet in the middle är en teknik som är användbar för att snabba upp problem som detta, som går ut på att vi måste söka oss igenom en relativt stor mängd möjliga lösningar för att inse vilka som är rätt. För att illustrera idén kan vi beakta följande problem som förhoppningsvis är något enklare: Givet ett tal c, hitta två tal a och b, större än 0, så att a 2 + b 2 = c 2. En möjlig lösning till problemet är att helt enkelt testa alla kombinationer av a och b så att 0 < a, b < c för att hitta alla lösningar. Detta tar dock O(c 2 ) tid, vilket snabbt blir ohållbart för stora värden för c. En alternativ lösning på detta problemet är att använda sig av meet in the middle (även om det finns andra smidigare lösningar för just detta problemet). Idén med meet in the middle är att dela upp alla möjliga indata i två delar så att vi kan beräkna ena halvan i förväg och därmed undvika mängder av onödiga beräkningar när vi kommer till andra halvan av indatan. I vårt exempel kan vi undersöka uttrycket a 2 och b 2 separat genom att skriva om problemet som a 2 = c 2 b 2. Fördelen med omskrivningen är att vi med hjälp av en 6 / 8
8 tabell för alla möjliga värden av a 2 enkelt kan testa om det finns en lösning för ett specifikt värde på b 2 (kom ihåg att c och därmed c 2 är givet). Vi börjar alltså med att bygga en tabell som innehåller värdet på a 2 för alla möjliga a. Vi lagrar lämpligtvis dessa i en symboltabell (exempelvis en hashtabell) med nyckel a 2 och värde a så att vi snabbt kan hitta dem senare. Sedan kan vi undersöka andra halvan. För alla möjligheter för b kan vi nu beräkna uttrycket c 2 b 2 och se om det värdet finns i symboltabellen. Om det fanns i symboltabellen betyder det att det fanns ett a som tillsammans med det b vi undersöker för tillfället uppfyller det villkor vi var intresserade av, nämligen a 2 + b 2 = c 2. Antag exempelvis att c = 5. Då skapar vi först en tabell för värdena av a 2 för alla 0 < a < 5, vilken kommer innehålla datan i tabell 1. Sedan kan vi testa alla möjliga värden på b. b = 1 ger c 2 b 2 = 24, och eftersom 24 inte finns i tabellen är inte b = 1 en lösning till problemet. b = 2 ger c 2 b 2 = 21, vilket inte heller finns i tabellen. b = 3 ger c 2 b 2 = 16, vilket finns i tabellen. Tabellen säger också att a = 4 ger a 2 = 16, alltså är a = 4, b = 3 en lösning till problemet. Om vi sedan fortsätter att försöka med b = 4 kommer vi (förvånansvärt nog) se att även a = 3, b = 4 är en lösning på problemet. I och med detta har vi lyckats hitta alla lösningar genom att bara testa 4 2 = 8 värden i stället för att testa alla kombinationer av a och b, vilket skulle kräva 4 2 = 16 test. Nyckel Värde a 2 a Tabell 1: Symboltabell Om vi antar att symboltabellen implementeras med hjälp av en hashtabell (eller något ekvivalent) så kommer denna lösningen ta O(c + c) = O(c) tid, vilket är snabbare än den intuitiva lösningen. I just det här fallet kan vi lösa problemet på andra sätt också, exempelvis i och med att vi vet att a 2 är monoton, och att det finns en invers till a 2 ( a) som vi kan utnyttja. Meet in the middle utnyttjar dock inte något av dessa fall, och därmed kan vi använda meet in the middle i fler situationer, exempelvis i subset sum, där vi varken har en monoton funktion eller en invers att tillgå. 15 Lösningsidé Vi kan som sagt använda meet in the middle för att räkna fram lösenord som har hashats med hjälp av subset sum relativt snabbt (i alla fall mycket snabbare än brute). Den stora frågan är bara: Hur kan vi dela upp problemet? För att belysa detta kan vi tänka oss att vi skriver hashfunktionen på följande sätt: P 0 T 0 + P 1 T 1 + P 2 T 2 + P 3 T P N T N = H P i är bit nummer i i lösenordet som hashas, och T i är rad nummer i i tabellen T. Detta motsvarar beskrivningen i avsnitt 3 eftersom raderna i tabellen multipliceras med antingen 1 om raden ska användas eller 0 om raden inte ska användas. När vi har skrivit hashfunktionen på detta sätt kan vi se att den har liknande struktur som det problemet vi löste i avsnitt 14, även om vi har fler termer här. På samma sätt som tidigare kan vi skriva om problemet på följande sätt för att kunna använda meet in the middle: P 0 T 0 + P 1 T P m T m = H P m+1 T m+1... P N T N Detta innebär i praktiken att vi tänker oss att vi delar upp tabellen i två delar, en del som motsvarar de m första bitarna i lösenordet, och den andra delen innehåller resterande bitar. Sedan kan vi testa alla möjliga kombinationer av bitarna i de två delarna separat genom att sätta in resultaten för ena halvan i en 7 / 8
9 symboltabell. Om vi skriver om problemet ytterligare lite så kan vi se att vi inte ens behöver implementera vår egen version av subset_sum: subset_sum(p a, T ) = H subset_sum(p b, T ) Där P a är ett lösenord där alla bitar utom bitarna 0 till m alltid är noll, och P b är ett lösenord där bitarna 0 till m alltid är noll. I och med att olika delar av P a och P b används, så kan vi enkelt slå ihop dem till lösenordet P genom att helt enkelt beräkna P = P a + P b. 16 Binär aritmetik För att dela upp symboltabellen i två delar kan det vara smidigt att känna till hur man kan utnyttja aritmetiska operationer för att enkelt hitta alla kombinationer av ett känt antal bitar. brute behöver iterera igenom alla möjliga kombinationer av rader i tabellen. Detta görs genom att i varje iteration lägga på 1 till en Key som har initierats till 0. När brute ser att Key-variabeln har slagit runt till 0 igen vet den att den har itererat igenom alla tal som Key kan representera, och därmed alla möjliga kombinationer av rader i tabellen. Vi kan utnyttja samma idé för att iterera igenom delar av tabellen. För att iterera igenom de minst signifikanta bitarna (de längst till höger i utskriften) kan vi göra på samma sätt, så länge vi ser till att vi avslutar iterationen i tid. Detta kan vi exempelvis göra med hjälp av medlemsfunktionen bit för att se om en viss bit i talet är 1. Vi kan också iterera genom alla kombinationer för de mest signifikanta bitarna (de längst till vänster i utskriften) genom att öka med ett tal som är större än 1. Om vi exempelvis ökar med 2 varje gång så kommer vi hoppa över alla tal där den lägsta biten är satt, och därmed bryr vi oss bara om kombinationerna av alla bitar förutom den lägsta. Detta fungerar för godtycklig tvåpotens. Talet 4 hoppar över de två minst signifikanta bitarna, talet 8 hoppar över de tre minst signifikanta bitarna, och så vidare. 8 / 8
TDDI16: Datastrukturer och algoritmer
TDDI16: Datastrukturer och algoritmer Lab 3: Ordkedjor Höstterminen 2018 2018-05-14 1 Upplägg Första delen av instruktionen, avsnitt 2 till 6, innehåller en fullständig beskrivning av problemet utan några
Vinjetter TDDC91 Datastrukturer och algoritmer
Vinjetter TDDC91 Datastrukturer och algoritmer 30 augusti 2013 2 Scenario 1 Man har inom Posten Logistik AB skrivit programvara för sortering av kundinformation och vill standardisera användningen av sorteringsalgoritmer.
Linköpings Tekniska Högskola Instutitionen för Datavetenskap (IDA) Torbjörn Jonsson, Erik Nilsson Lab 2: Underprogram
Mål Lab 2: Underprogram Följande laboration introducerar underprogram; procedurer, funktioner och operatorer. I denna laboration kommer du att lära dig: Hur man skriver underprogram och hur dessa anropas.
Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock
Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.
Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.
Datastrukturer och algoritmer Föreläsning 7 Tabell, hashtabell Relation & lexikon Innehåll Tabell Tabell Hashtabell Relation, lexikon Modell Uppslagsbok Organisation Ändlig avbildning av argument på värden
Värmedistribution i plåt
Sid 1 (6) Värmedistribution i plåt Introduktion Om vi med konstant temperatur värmer kanterna på en jämntjock plåt så kommer värmen att sprida sig och temperaturen i plåten så småningom stabilisera sig.
Kryptering. Krypteringsmetoder
Kryptering Kryptering är att göra information svårläslig för alla som inte ska kunna läsa den. För att göra informationen läslig igen krävs dekryptering. Kryptering består av två delar, en algoritm och
Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.
Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis
Övning 6 - Tillämpad datalogi 2012
/home/lindahlm/activity-phd/teaching/12dd1320/exercise6/exercise6.py October 2, 20121 0 # coding : latin Övning 6 - Tillämpad datalogi 2012 Sammanfattning Idag gick vi igenom komprimering, kryptering och
Datastrukturer. föreläsning 6. Maps 1
Datastrukturer föreläsning 6 Maps 1 Avbildningar och lexika Maps 2 Vad är ett lexikon? Namn Telefonnummer Peter 031-405937 Peter 0736-341482 Paul 031-405937 Paul 0737-305459 Hannah 031-405937 Hannah 0730-732100
DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011
DD1320 Tillämpad datalogi Lösning (skiss) till tenta 20 okt 2011 1 KMP P I P P I N i 1 2 3 4 5 6 Next[i] 0 1 0 2 1 3 2 Huffmankodning: Algoritmen 1. Sortera tecknen som ska kodas i stigande förekomstordning.
Uppgift 1 ( Betyg 3 uppgift )
2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal
TDIU Regler
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift
Magnus Nielsen, IDA, Linköpings universitet
Föreläsning ADT Map/Dictionary, hashtabeller TDDC9,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 7 september 208 Magnus Nielsen, IDA, Linköpings universitet. ADT Map/Dictionary.
kl Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Programkonstruktion och. Datastrukturer
Programkonstruktion och Datastrukturer Repetitionskurs, sommaren 2011 Datastrukturer (hash-tabeller och heapar) Elias Castegren elias.castegren.7381@student.uu.se Arrayer igen En array är en linjär datastruktur
Uppgift 1 (Oläsliga krypterade meddelanden)
Uppgift 1 (Oläsliga krypterade meddelanden) Ofta vill man kryptera text för att inte andra skall se vad man skrivit. I den givna filen KRYPTERAD_TEXT.TXT finns en krypterad text som kan vara av intresse
Programmeringsuppgifter 1
Programmeringsuppgifter 1 Redovisning: Ni demo-kör och förklarar för handledaren några av de program ni gjort. Ni behöver inte hinna allt, redovisa så långt ni kommit. Om ni hinner mer kan ni alltid redovisa
TDP005 Projekt: Objektorienterat system
. TDP005 Projekt: Objektorienterat system Laboration i Make och CMake Författare Filip Strömbäck Höstterminen 2016 Version 1.0 2016-10-04 Introduktion I denna lab kommer vi titta närmare på två verktyg
Krypteringteknologier. Sidorna 580-582 (647-668) i boken
Krypteringteknologier Sidorna 580-582 (647-668) i boken Introduktion Kryptering har traditionellt handlat om skydda konfidentialiteten genom att koda meddelandet så att endast mottagaren kan öppna det
HI1024 Programmering, grundkurs TEN2 2015-10-30
HI1024 Programmering, grundkurs TEN2 2015-10-30 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre
Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2
Föreläsning 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll
Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen
Datastrukturer och algoritmer Föreläsning 15 Inför tentamen 1 Innehåll Kursvärdering Vi behöver granskare! Repetition Genomgång av gammal tenta 2 Första föreläsningen: målsättningar Alla ska höja sig ett
Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1
Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens
Introduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
Användarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Prov i DAT 312: Algoritmer och datastrukturer för systemvetare
Prov i DAT 312: Algoritmer och datastrukturer för systemvetare Jacek Malec Datavetenskap, LU 11 april 2003 Datum 11 april 2003 Tid 14 19 Ansvarig lärare Jacek Malec (tel. 03 9890431) Hjälpmedel inga Antal
TDP Regler
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Problem: BOW Bowling. Regler för Bowling. swedish. BOI 2015, dag 1. Tillgängligt minne: 256 MB. 30.04.2015
Problem: BOW Bowling swedish BOI 0, dag. Tillgängligt minne: 6 MB. 30.04.0 Byteasar tycker om både bowling och statistik. Han har skrivit ner resultatet från några tidigare bowlingspel. Tyvärr är några
TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor
TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor Johan Thim 22 augusti 2018 1 Vanliga symboler Lite logik Implikation: P Q. Detta betyder att om P är sant så är Q sant. Utläses P medför Q
Övning 6. Komprimering, kryptering, dokumentering & testning
Per Sedholm DD1320 (tilda11) 2011-10-05 1. Smittskydd Övning 6 Komprimering, kryptering, dokumentering & testning Du har fått ett mail som innehåller tips mot spridning av virus. Informationen är komprimerad
TDDI TDDI22 Tentaregler
Inloggning TDDI22 Tentaregler Logga in i tentasystemet genom att välja session exam system och logga in med ditt vanliga LiU- ID. Välj inte att ha denna session som standardsession. Verifiera att dina
Uppgift 1 (Sorterade heltal som är OK)
2013-03-12.kl.14-19 Uppgift 1 (Sorterade heltal som är OK) Ibland råkar man ut för att man måste se till att man inte får dubletter i sina inmatningar. Denna uppgift baserar sig på detta, men dessutom
TDP Regler
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa
Övningsuppgifter till föreläsning 2 Variabler och uttryck
Sid 1 (5) Övningsuppgifter till föreläsning 2 Variabler och uttryck Syfte Syftet med övningsuppgifterna är att träna på: Aritmetik, variabler, tilldelning, scanf och printf Generellt Diskutera gärna uppgifterna
TDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Laboration: Whitebox- och blackboxtesting
Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska
Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler
21-1-2 1 Dagens föreläsning Hur fungerar ett Lisp system intern struktur av symbolen, tal, listan pekare - delade strukturer - eq minneshantering fri lista - sophämtning/garbage collection stack Diverse
International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor
Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm
Nonogram
Nonogram. Vad är nonogram? Nonogram är små enkla men fascinerande pyssel som ursprungligen kommer från Japan. De har också givits ut i söndagsbilagan i engelska dagstidningar under flera år. Idén bakom
Föreläsning 3.1: Datastrukturer, en översikt
Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,
TDIU Regler
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion
Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-11-19 Plot och rekursion I denna laboration skall du lära dig lite om hur plot i MatLab fungerar samt använda
kl Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Programmeringsolympiaden 2012 Kvalificering
Programmeringsolympiaden 2012 Kvalificering TÄVLINGSREGLER Tävlingen äger rum på ett av skolan bestämt datum under sex timmar effektiv tid. Tävlingen består av sex uppgifter som samtliga ska lösas genom
TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng
TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,
Uppgift 1 (grundläggande konstruktioner)
Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en
Användarmanual för Pagero Kryptering
för Pagero Kryptering Version 1.1-1 - Allmänt... 3 Kryptering av filer... 3 Dekryptering av filer... 3 Installation... 4 Inställningar... 5 Skapa nycklar... 6 Lägg till kataloger för övervakning... 6 Lägg
Shannon-Fano-Elias-kodning
Datakompression fö 5 p.1 Shannon-Fano-Elias-kodning Antag att vi har en minnesfri källa X i som tar värden i {1, 2,...,L}. Antag att sannolikheterna för alla symboler är strikt positiva: p(i) > 0, i. Fördelningsfunktionen
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java
I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program
Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java
Uppgift 1 (vadå sortering?)
2011-06-08.kl.14-19 Uppgift 1 (vadå sortering?) Du skall skriva ett program som sorterar in en sekvens av tal i en vektor (en array ) enligt en speciell metod. Inledningsvis skall vektorn innehålla endast
Problem: FIL File Paths
Problem: FIL File Paths swedish BOI 2015, dag 2. Tillgängligt minne: 256 MB. 1.05.2015 Byteasar tycker om att leva farligt. Han springer med saxar, skickar in lösningar på tävlingsproblem utan att testa
Givet två naturliga tal a och b, som inte båda två är 0, hur räknar man ut största gemensamma delaren av a och b?
Euklides algoritm för största gemensamma delaren Givet två naturliga tal a och b, som inte båda två är 0, hur räknar man ut största gemensamma delaren av a och b? Euklides har kommit på en metod (algoritm)
Algoritmer, datastrukturer och komplexitet
Algoritmer, datastrukturer och komplexitet Övning 1 Anton Grensjö grensjo@csc.kth.se 14 september 2015 Anton Grensjö ADK Övning 1 14 september 2015 1 / 22 Översikt Kursplanering F1: Introduktion, algoritmanalys
Protokollbeskrivning av OKI
Protokollbeskrivning av OKI Dokument: Protokollbeskrivning av OKI Sida 1 / 17 1 Syfte Det här dokumentet har som syfte att beskriva protokollet OKI. 2 Sammanfattning OKI är tänkt som en öppen standard
Inledande programmering med C# (1DV402) Introduktion till programmering
Introduktion till programmering Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt
Laboration 1 Introduktion till Visual Basic 6.0
Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.
TDDI16 Datastrukturer och algoritmer. Algoritmanalys
TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att
Grundläggande datalogi - Övning 4
Grundläggande datalogi - Övning 4 Björn Terelius November 21, 2008 Definitioner Olika mått på komplexitet Definition En funktion f sägs vara O(g) om det existerar konstanter c, N så att f (n) < cg(n) för
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,
Tentamen TEN1 HI
Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha
Introduktion till programmering
Introduktion till programmering Vad är programmering? Vad gör en dator? Vad är ett datorprogram? 1 (9) Vad är programmering? För att bestämma en cirkels area måste du: 1. Dividera diametern 5 med 2. 2.
Föreläsning 2. Operativsystem och programmering
Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2
Föreläsning 4 ADT Map/Dictionary, hashtabeller, skip-listor TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 9 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 4.1
Chapter 3: Using Classes and Objects
Chapter 3: Using Classes and Objects I dessa uppgifter kommer du att lära dig om hur man använder klasser och metoder från java biblioteket. Du kommer inte att förstå allt som händer bakom metod anrop
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18
TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M
TANA21+22/ 5 juli 2016 LAB 1. FELANALYS 1 Inledning I laborationerna används matrishanteringsprogrammet MATLAB. som genomgående använder dubbel precision vid beräkningarna. 1.1 Innehåll Du ska 1. bestämma
TDDC77 Objektorienterad Programmering
TDDC77 Objektorienterad Programmering Föreläsning 5 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin 2018 Outline Arrayer Metoder Räckvidd och Livslängd Arrayer Vända om inlästa värdena Vända om
Programmeringsolympiaden 2010 Kvalificering
Programmeringsolympiaden 2010 Kvalificering TÄVLINGSREGLER Tävlingen äger rum på ett av skolan bestämt datum under sex timmar effektiv tid. Tävlingen består av sex uppgifter som samtliga ska lösas genom
F2 Binära tal EDA070 Datorer och datoranvändning
Datarepresentation F2 Binära tal EDA070 Roger Henriksson I en dator lagras och behandlas all information i form av binära tal ettor och nollor. En binär siffra kallas för en bit BInary digit. Ett antal
JavaScript del 5 Funktioner
JavaScript del 5 Funktioner När man skriver JavaScriptkod eller program i andra programmeringsspråk för den delen så kan det finnas anledningar till att man vill dela upp sitt stora program i flera mindre
Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647
Lågnivåprogrammering Föreläsning 2 Lågnivåprogrammering Förberedelse inför laboration 2. Maskinspråk, assemblerspråk Talrepresentation En enkel dator, komponenter Instruktionsformat, instruktionscykel
Programmeringsolympiaden 2015
Programmeringsolympiaden 2015 TÄVLINGSREGLER FÖR SKOLKVALET Tävlingen äger rum på av skolan bestämt datum under sex timmar effektiv tid. Eleven ska i förväg komma överens med läraren om att använda egen
Aritmetisk kodning. F (0) = 0 Exempel: A = {1, 2, 3} k=1. Källkodning fö 5 p.1/12
Aritmetisk kodning Vi identifierar varje sekvens av källsymboler med ett tal i intervallet [0, 1). Vi gör det med hjälp av fördelningsfunktionen (cumulative distribution function) F. För enkelhets skull
Regler. Betygssättning
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Datasäkerhet. Petter Ericson pettter@cs.umu.se
Datasäkerhet Petter Ericson pettter@cs.umu.se Vad vet jag? Doktorand i datavetenskap (naturliga och formella språk) Ordförande Umeå Hackerspace Sysadmin CS 07-09 (typ) Aktiv från och till i ACC m.fl. andra
Ekvivalensrelationer
Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element
TDP Regler
Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt
Kryptoteknik. Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT)
Kryptoteknik Marcus Bendtsen Institutionen för Datavetenskap (IDA) Avdelningen för Databas- och Informationsteknik (ADIT) XOR XOR används ofta i kryptering: A B A B 0 0 0 0 1 1 1 0 1 Bit-flipping Om XOR
Tentamen, EDAA10 Programmering i Java
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen, EDAA10 Programmering i Java 2019 08 21, 08.00 13.00 Anvisningar: Preliminärt ger uppgifterna 25 + 15 + 5 = 45 poäng. För godkänt betyg
OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1
Institutionen för Data- och informationsteknik JSk TENTAMEN OBJEKTORIENTERAD PROGRAMVARUUTVECKLING Övningstentamen 1 OBS! Det kan finnas kurser med samma eller liknande namn på olika utbildningslinjer.
Laborationer i C++ TDDI16 Datastrukturer och algoritmer
Laborationer i C++ TDDI16 Datastrukturer och algoritmer 10 oktober 2016 2 Förord Detta kompendium innehåller laborationer för kursen TDDI16 Datastrukturer och algoritmer som ges vid Institutionen för datavetenskap
Föreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Programmering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!
F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Roger Henriksson Von Neumann-arkitekturen Gemensamt minne för programinstruktioner och data. Sekventiell exekvering av instruktionerna.
Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet 2009-08-09
Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet 2009-08-09 1. Introduktion till webbprogrammering Webbprogrammering består av ett antal
Uppsala Universitet Matematiska Institutionen Thomas Erlandsson
Uppsala Universitet Matematiska Institutionen Thomas Erlandsson LÄSANVISNINGAR VECKA 36 VERSION 1. ARITMETIK FÖR RATIONELLA OCH REELLA TAL, OLIKHETER, ABSOLUTBELOPP ADAMS P.1 Real Numbers and the Real
RSA-kryptering och primalitetstest
Matematik, KTH Bengt Ek augusti 2016 Material till kurserna SF1630 och SF1679, Diskret matematik: RSA-kryptering och primalitetstest Hemliga koder (dvs koder som används för att göra meddelanden oläsbara
Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1
Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut
3, 6, 9, 12, 15, 18. 1, 2, 4, 8, 16, 32 Nu är stunden inne, då vill vill summera talen i en talföljd
I föreläsning 18 bekantade vi oss med talföljder, till exempel eller 3, 6, 9, 1, 15, 18 1,, 4, 8, 16, 3 Nu är stunden inne, då vill vill summera talen i en talföljd och 3 + 6 + 9 + 1 + 15 + 18 1 + + 4
DUGGA Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet
Föreläsning 13 Innehåll Algoritm 1: Sortera Exempel på problem där materialet i kursen används Histogramproblemet Schemaläggning Abstrakta datatyper Datastrukturer Att jämföra objekt Om tentamen Skriftlig
Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder
Block 2 Algebra och Diskret Matematik A BLOCK INNEHÅLL Referenser Inledning 1. Följder 2. Rekursiva definitioner 3. Sigmanotation för summor 4. Strängar 5. Tal 6. Övningsuppgifter Referenser Följder, strängar