Kan ett datorprogram spela solitär?
|
|
- Karl-Erik Strömberg
- för 7 år sedan
- Visningar:
Transkript
1 Kan ett datorprogram spela solitär? Malin Persson 1
2 Sammanfattning Solitär är ett gammalt och välkänt brädspel med enkla regler och är därför ett tacksamt spel att försöka lösa maskinellt. I denna rapport beskriver jag tillvägagångssätt som man tidigare har haft för maskinell lösning av solitär, samt mitt eget försök att i programspråket Python konstruera en agent som kan spela solitär. Avslutningsvis jämför jag min agent med de som tidigare implementerats. 2
3 Innehållsförteckning Kan ett datorprogram spela solitär? Inledning Bakgrund Regler för solitär Syfte och metod En tidigare maskinell implementation av solitär Modeller Modell A Modell B Modell C Pagodafunktioner Symmetrier och lösningar Tidsåtgång för de olika modellerna Min maskinella implementation av solitär Kort beskrivning av programmets uppbyggnad Klassen Node Klassen Problem Sökalgoritmer Resultat Diskussion Referenslista...12 Tryckta källor...12 Internet
4 1. Inledning 1.1 Bakgrund Solitär är ett brädspel för en spelare. Det finns olika varianter av solitär där spelplanen och reglerna kan se lite olika ut. Men gemensamt för alla varianter är att man har en spelplan med ett antal hål, som vart och ett antingen kan vara tomt eller innehålla en kula. Figur 1. Olika varianter av solitär. Från vänster: engelsk solitär, fransk solitär och triangelsolitär. 1.2 Regler för solitär Spelet börjar med att man har kulor i vissa hål på spelplanen och dess vanligaste mål är att endast ha en kula kvar på spelplanen. Vissa varianter av solitär kräver att den sista kulan ska vara i ett visst hål när spelet är slut, till exempel i det mittersta hålet. Det finns också varianter där man väljer ut en specifik kula som ska vara ensam kvar och varianter där man ska ha flera kulor kvar i ett bestämt mönster. I min implementation som presenteras i kapitel 3, samt i den artikel jag har använt som referens (Jefferson m.fl. 2005), används spelplanen för engelsk solitär, där spelplanen har 33 hål arrangerade i ett korsformat mönster. Från början ligger det kulor i alla hål utom i det mittersta, och spelets mål är att bara ha en kula kvar på spelplanen. För att få ta bort en kula från spelplanen måste man hoppa över den med en annan kula, vertikalt eller horisontellt. Man får bara hoppa över en kula per hopp, så för att få göra ett drag krävs det att man har tre hål i rad där de två första hålen har kulor i sig och det tredje är tomt. Efter ett hopp blir de tre hålens tillstånd inverterade, dvs. de två första hålen blir tomma och det tredje får en kula i sig (se Figur 2). Figur 2: Ett drag i solitär Man får inte flytta en kula utan att hoppa över någon kula. Det gäller därför att planera sina drag så att man håller ihop gruppen dvs. så att ingen kula hamnar för långt ifrån de andra. Då kan man aldrig hoppa över den kulan och får inte bort den från spelplanen. 4
5 1.3 Syfte och metod Syftet är att bygga ett program i programspråket Python som med hjälp av en sökalgoritm löser brädspelet engelsk solitär, samt att jämföra detta med implementationer av engelsk solitär som andra har gjort. I kapitel 2 presenteras och förklaras en implementation av solitär som gjorts av andra (Jefferson m.fl., 2005) och i kapitel 3 presenterar jag min egen implementation. På grund av kursens omfattning och på grund av intresset att jämföra avancerade metoder med enklare, valde jag att endast bygga en enklare agent som löser problemet med vanlig djupet först-sökning i stället för att basera den på den mer optimerade och genomarbetade modell som Jefferson m.fl. (2005) beskriver. På så sätt blir möjligheten större att jämföra de tidigare implementationerna med min agent och på så vis få praktisk insikt i hur mycket effektivitet man vinner genom att använda de avancerade metoderna. 2. En tidigare maskinell implementation av solitär I artikeln Modelling and solvning English Peg Solitaire (Jefferson m.fl., 2005) förklaras hur man kan lösa solitär som ett optimeringsproblem. 2.1 Modeller Reglerna för solitär beskrivs i tre olika matematiska modeller som de kallar modell A, B och C där modell C är en kombination av modell A och B. De tar även upp en slags funktioner som kallas pagodafunktioner, diskuterar hur man kan bryta symmetrier som uppstår i spelet och jämför slutligen resultaten de fick med hjälp av de tre olika modellerna Modell A I modell A ställs ett antal villkor upp i form av matematiska ekvationer, som beskriver hur kulor får flyttas i solitär. För att veta vilka hål man har kulor i och inte, använder man variabeln bstate[i, j, t], som beskriver tillståndet för hålet på position (i, j) vid tidpunkten t. bstate[] är lika med 1 om det är en kula i hålet och 0 om hålet är tomt. Ekvation 2-13 förklarar, att för att kunna göra ett drag i solitär måste det finnas tre hål i rad där de två första hålen har kulor i sig och det tredje är tomt. Ekvationerna vid nummer 14 visar att spelplanen vid tidpunkterna t respektive t+1 måste stämma överens med det drag man gör i t. Ekvation 15 implicerar att det endast kan ske ett drag per tidpunkt och ekvation 1 utgör kravet att den sista kulan måste vara i hålet i mitten av spelplanen när spelet är slut. 5
6 2.1.2 Modell B I modell B används en lista, moves[t], för att visa den sekvens av drag som löser spelet. I Tabell 1 visas de 76 möjliga drag som man kan göra i solitär. Tabell 1. Alla möjliga drag i solitär (Jefferson m.fl., 2005) De ställer även upp villkor (preconditions) som motsvarar spelreglerna. Ett av villkoren är: för att man ska kunna göra ett drag, ska det vara en kula i de två första hålen men inte i det tredje. Vill man exempelvis göra drag nummer 0 i moves[] (alltså 2,0 4,0) måste det vara en kula i 2,0 och 3,0 medan hål 4,0 måste vara tomt. Villkoren kontrolleras genom att undersöka de senaste drag man gjort som inkluderar de aktuella hålen. Om dessa senaste drag har lämnat hålen i tillstånden kula, kula respektive tomt, kan draget genomföras. Två funktioner som heter Support() och Conflict() används för att kontrollera om de olika dragen i moves[] är förenliga 6
7 med det tillstånd spelplanen är i. Denna modell innehåller väldigt många begränsningar (constraints). Eftersom det finns 76 möjliga drag, det krävs 31 drag för att klara spelet och varje drag kräver att tre villkor är uppfyllda, blir det 7068 begränsningar Modell C Modell C är en kombination av modell A och B som använder både listan bstate[] från modell A och moves[] från modell B. Detta gör det möjligt att definiera spelplanens nästa tillstånd med hjälp av det nuvarande tillståndet och ett drag genom att ställa upp ekvivalenser mellan ekvationer med bstate[] och ekvationer med moves[]. För varje hål vid varje tidpunkt kontrollerar man om hålet har samma tillstånd som det hade vid förra tidpunkten eller om det har ändrats. För att göra detta används funktionerna Changes(i, j), som är listan av de drag som kan ändra tillståndet för ett hål; PegIn(i, j), som är de drag som lägger en kula i ett tomt hål och PegOut(i, j) som tar bort en kula från ett fyllt hål. 2.2 Pagodafunktioner För att lösa problemet med hjälp av modellerna ovan, använder sig Jefferson m.fl. (2005) av ett slags funktioner som kallas pagodafunktioner. En pagodafunktion kan se ut på lite olika sätt, men de innebär att man tilldelar varje hål ett värde, så att tre hål a, b, c som sitter i rad alltid uppfyller a+b>=c. Pagodavärdet för spelplanens tillstånd räknas ut genom att summera dessa värden för alla hål som innehåller kulor. Ett villkor i solitär är att pagodavärdet aldrig får öka, bara minska. Om man någon gång mitt i spelet får ett pagodavärde som är lägre än måltillståndets pagodavärde, kommer man inte att kunna lösa spelet. Pagodafunktioner är därför en bra pruningmetod som kan användas för att upptäcka återvändsgränder innan man kommer fram till dem. 2.3 Symmetrier och lösningar En spelplan för engelsk solitär är både rotationssymmetrisk och reflektionssymmetrisk vilket gör att det ofta finns flera olika sätt att göra samma sak. Detta gör sökträdet onödigt stort, och det finns sätt att förminska det. En slags symmetri som man gärna vill ha bort är symmetri mellan oberoende drag. Varje drag påverkar tillstånden för tre hål genom att invertera tillstånden hos dem. Två drag är oberoende av varandra om och endast om deras tre hål inte överlappar varandra. Drag som är oberoende av varandra kan utföras i vilken ordning som helst utan att resultatet påverkas, så man sparar en hel del tid om man bestämmer sig för en ordning. För att göra detta ordnar man alla möjliga drag i nummerordning enligt tabellen i modell B och inför begränsningen att alla par av oberoende drag måste utföras i nummerordning med det lägsta först. En annan sorts symmetri är den när flera olika sekvenser av drag uppnår samma resultat. För att bryta denna symmetri kan man utföra en komplett sökning ner till ett visst djup, gruppera de sekvenser av drag som leder till identiska tillstånd och sedan införa begränsningar som endast tillåter en representant från varje grupp. 7
8 2.4 Tidsåtgång för de olika modellerna Modell A, B och C jämförs i förmåga att lösa central solitär (dvs. solitär då kulan måste vara i mitten i måltillståndet). Modell A misslyckades med att lösa problemet inom 12 timmar, och modell B ockuperade allt minne innan den ens hunnit ställa upp alla begränsningar. Den bästa metoden var modell C, som löste spelet inom 20 sekunder. Utan kravet att den sista kulan skulle vara i mitten kom den fram till en lösning efter 152 sekunder. Modell C hade alltså fördel av att veta var den sista kulan måste vara. 3. Min maskinella implementation av solitär Förutom att studera tidigare solitärmodeller, har jag själv byggt ett program i programspråket Python som kan lösa solitär. Jag valde att inte spela central solitär, det fanns alltså inget krav på att den sista kulan skulle vara i mitten. Jag har inte optimerat mitt program enligt modellerna i Jefferson m.fl. (2005), utan mitt mål var enbart att bygga ett program som löser problemet. 3.1 Kort beskrivning av programmets uppbyggnad På AIMAs hemsida (Russel & Norvig, 2005) fanns filen search.py, ett kodskelett som jag använde som utgångspunkt för min agent. Jag använde klasserna Node och Problem från filen, modifierade dem en aning så att de passade mitt spel och lade till mina egna funktioner i dem. Jag lånade även två olika sökalgoritmer från filen, nämligen tree_search och breadth_first_tree_search. När man kör programmet med hjälp av någon av sökalgoritmerna och det hittar en lösning så skriver det ut bilder av spelplanen som den ser ut i varje steg av lösningen från slutet till början. På så sätt kan man se hur agenten har valt att lösa problemet och även upptäcka eventuella buggar eftersom man kan se varje drag som agenten gör. Spelplanen ritas upp med hjälp av punkter, mellanrum och stora O:n så att det ser ut som en solitärspelplan. O symboliserar en kula och. Symboliserar ett tomt hål. Nedan visas ett exempel på hur en nod kan se ut då den skrivs ut. O O O O O. O O O O O O O O O O O.. O O O O O. O O O O O O O O 3.2 Klassen Node I detta kapitel presenteras och förklaras de funktioner som finns i klassen Node. Vill du se den fullständiga programkoden, se bilaga 1. Funktionen _init_ skapar nya noder (tillstånd) i spelet. Den tilldelar varje hål på spelplanen antingen värdet True eller värdet False True om det är en kula i hålet och False om det inte är det. Om noden har en förälder, dvs. om man har utgått från en annan nod och kan nå den nya genom göra ett visst drag, så kopierar _init_ föräldern och modifierar den genom att verkligen 8
9 göra det drag man valt att utföra. Om ingen förälder finns är man i spelets starttillstånd, och i det fallet tilldelas alla hål värdet True utom det mittersta som får värdet False. Funktionen printboard tar en nod som argument och ritar med hjälp av textsträngar upp spelplanen på skärmen. Denna funktion är enbart till för syns skull, kan man säga; den gör att man på ett smidigt sätt kan se hur spelplanen ser ut i varje tillstånd och följa de drag agenten gör. Om man exempelvis anropar printboard med startnoden som argument, får man följande utskrift: O O O O O O O O O O O O O O O O. O O O O O O O O O O O O O O O O Agenten arbetar betydligt snabbare om man inte använder printboard, så i slutändan anropade jag bara denna funktion på den sista noden, när spelet var löst. Under arbetets gång var dock printboard till nytta eftersom den visar om agenten följer de regler som man har tänkt sig (dvs. om man har implementerat reglerna på rätt sätt). Funktionen pegsleft räknar hur många kulor det finns kvar på spelplanen. När det bara finns en kvar har man vunnit! Vidare har vi funktionerna testright, testleft, testup och testdown som utförs på varje hål på spelplanen. Den kollar om det finns en kula i hålet och om den i så fall kan flyttas höger, vänster upp respektive ner. Funktionen legalmoves anropar alla dessa testfunktioner och gör för varje nod en lista över alla tillåtna drag. Funktionerna right, left, up och down utför de drag som agenten väljer att göra (de tidigare presenterade testfunktionerna utför ju inga drag, de kollar bara om de är möjliga att göra). En av dessa funktioner skickas med till _init_ när den nya noden ska skapas. Slutligen har vi funktionen path som skapar en lista av noder från den nod där man befinner sig nu och ända tillbaka till startnoden. Den visar alltså den väg som agenten gått för att komma dit den är just nu och är nödvändig för att agenten ska kunna leta sig tillbaka till en tidigare nod om den gör fel och hamnar i ett tillstånd där spelet är olösbart. Jag använder även denna funktion tillsammans med printboard för att rita upp den färdiga lösningen när spelet är slut. 3.3 Klassen Problem Funktionen _init_ i Problem-klassen tar emot ett nod som argument och skapar ett spel som börjar med den noden (i mitt fall är detta starttillståndet). Funktionen successor tar emot en nod och returnerar en lista över de noder som kan nås från denna, dvs. nodens efterföljare, dess barn. 9
10 Vidare har vi funktionen goal_test som helt enkelt kollar om måste är uppnått. Är det bara en kula kvar så returnerar funktionen True och skriver ut meddelandet Grattis till vinsten! Är kulan dessutom i mitten av spelplanen så jublar den lite extra. Slutligen finns här funktionen game som anropas för att sätta igång själva spelet. Den anropar helt enkelt en sökalgoritm och börjar leta det är här det spännande börjar! 3.4 Sökalgoritmer På min agent har jag provat sökmetoderna djupet först och bredden först. Dessa funktioner står utanför klasserna i min kod och är i princip kopierade rakt av från AIMAs hemsida, endast någon enstaka variabel är ändrad för att passa min kod. Bredden först-funktionen behövde funktionen Stack och klasserna Queue och FIFOQueue för att kunna fungera, så jag klippte in även dessa rakt av från AIMA. 3.5 Resultat Mitt solitärprogram lyckades lösa spelet på ungefär 25 minuter med hjälp av djupet förstsökning. Jag provade även sökalgoritmen bredden först, men då fick jag efter en stund ett felmeddelande som löd såhär: Traceback (most recent call last): File "Z:\729g11\Projekt\solitaragent.py.py", line 317, in <module> problem1.game(node1) File "Z:\729g11\Projekt\solitaragent.py.py", line 244, in game winning_node=breadth_first_tree_search(problem1) File "Z:\729g11\Projekt\solitaragent.py.py", line 306, in breadth_first_tree_search return tree_search(problem, FIFOQueue()) File "Z:\729g11\Projekt\solitaragent.py.py", line 301, in tree_search fringe.extend(problem.successor(node)) File "Z:\729g11\Projekt\solitaragent.py.py", line 281, in extend self.a.extend(items) MemoryError Jag tolkar MemoryError som att minnesåtgången blev för stor för att kunna lösa problemet, vilket inte är så konstigt när man kör bredden först på ett sökträd med lösningen på djupet 31 och där vissa noder har många barn. Sökträdet blir för stort för att hantera, kanske särskilt eftersom mitt program inte rensar bort de noder som är likadana. Därför valdes djupet först som sökalgoritm. 10
11 5. Diskussion Jag och Jefferson m.fl. (2005) har inte löst exakt samma problem. Mitt syfte var att bygga ett program som fungerar och löser problemet, medan Jefferson m.fl. (2005) har högre mål och försöker optimera sin lösning så mycket som möjligt. Min lösning är alltså inte lika genomarbetad och välutvecklad, men utgör ändå något intressant att jämföra med. I och med att min agent inte gör någon pruning överhuvudtaget ges insikt i hur pass mycket tid man kan spara på bra pruningmetoder. Jefferson m.fl. (2005) kom med hjälp av sin modell C fram till en lösning på 152 sekunder i varianten utan krav på att kulan ska vara i mitten. Min implementation löste samma problem på 25 minuter, alltså kan man med hjälp av pagodafunktionen och symmetrimetoderna vinna ungefär 22,5 minuter (med en liten felmarginal för att det inte framgår vilken prestanda deras datorer hade). 11
12 6. Referenslista Tryckta källor Russell, Stuart & Norvig, Peter (2003). Artificial intelligence A modern approach. Pearson Education, Inc. Jefferson, Christopher; Miguel, Angela; Miguel, Ian & Tarin, Armagan (2005) Modelling and solvning English Peg Solitaire. AI Group, Department of Computer Science, University of York, UK. Internet Russell, Stuart & Norvig, Peter (2005). AIMA Python file: search.py [www] < Hämtat
13 5 Bilagor 5.1 Bilaga 1 Programkod för solitäragenten # -*- coding: cp1252 -*- import copy import random #from utils import * class Node: """A node in a search tree. Contains a pointer to the parent (the node that this is a successor of) and to the actual state for this node. Note that if a state is arrived at by two paths, then there are two nodes with the same state. Also includes the action that got us to this state, and the total path_cost (also known as g) to reach the node. Other functions may add an f and h value; see best_first_graph_search and astar_search for an explanation of how the f and h values are handled. You will not need to subclass this class.""" def init (self, parent=none, action=none): "Create a search tree Node, derived from a parent by an action." initial_state = [ [None,None,True,True,True,None,None], [None,None,True,True,True,None,None], [True,True,True,True,True,True,True], [True,True,True,False,True,True,True], [True,True,True,True,True,True,True], [None,None,True,True,True,None,None], [None,None,True,True,True,None,None]] self.parent = parent if parent==none: self.board=initial_state else: self.board=copy.deepcopy(parent.board) if action[2]=="right": self.right(action[0], action[1]) if action[2]=="left": self.left(action[0], action[1]) if action[2]=="up": self.up(action[0], action[1]) if action[2]=="down": self.down(action[0], action[1]) def printboard(self): #Visar hur spelplanen ser ut just nu for line in self.board: tecken = "" for hole in line: if hole==true: tecken += "O " elif hole==false: 13
14 tecken += ". " else: tecken += " " print tecken print "\n" def pegsleft(self): n=0 for line in self.board: for hole in line: if hole==true: n=n+1 return n def testright(self,x,y): """Testar om kulan på plats (x,y) kan flyttas höger""" try: if self.board[x][y] == True and self.board[x][y+1] == True and self.board[x][y+2] == False: return True else: return False except: return None def testleft(self,x,y): """Testar om kulan på plats (x,y) kan flyttas vänster""" try: if self.board[x][y] == True and self.board[x][y-1] == True and self.board[x][y-2] == False and y>=2: return True else: return False except: return None def testup(self,x,y): """Testar om kulan på plats (x,y) kan flyttas upp""" try: if self.board[x][y] == True and self.board[x-1][y] == True and self.board[x-2][y] == False and x>=2: return True else: return False except: return None def testdown(self,x,y): """Testar om kulan på plats (x,y) kan flyttas upp""" try: if self.board[x][y] == True and self.board[x+1][y] == True and self.board[x+2][y] == False: return True else: return False except: 14
15 return None def legalmoves(self): actions=[] for (x,y) in activeboard: if self.testright(x,y): actions.append([x,y,"right"]) if self.testleft(x,y): actions.append([x,y,"left"]) if self.testup(x,y): actions.append([x,y,"up"]) if self.testdown(x,y): actions.append([x,y,"down"]) return actions def right(self, x,y): #Kulan på position (x,y) hoppar över sin granne till höger self.board[x][y] = False self.board[x][y+1] = False self.board[x][y+2] = True def left(self, x,y): #Kulan på position (x,y) hoppar över sin granne till vänster self.board[x][y] = False self.board[x][y-1] = False self.board[x][y-2] = True def up(self, x,y): #Kulan på position (x,y) hoppar över grannen ovanför self.board[x][y] = False self.board[x-1][y] = False self.board[x-2][y] = True def down(self, x,y): #Gissa vad den här funktionen gör! self.board[x][y] = False self.board[x+1][y] = False self.board[x+2][y] = True def symmetric(self, othernode): tempnode1=copy.deepcopy(self) tempnode2=copy.deepcopy(self) tempnode3=copy.deepcopy(self) tempnode1.board.reverse() for row in tempnode2.board: row.reverse() tempnode3.board.reverse() for row in tempnode3.board: row.reverse() 15
16 if tempnode1.board == othernode.board: return True elif tempnode2.board == othernode.board: return True elif tempnode3.board == othernode.board: return True else: return False def path(self): "Create a list of nodes from the root to this node." x, result = self, [self] while x.parent: result.append(x.parent) x = x.parent return result class Problem: """The abstract class for a formal problem. You should subclass this and implement the method successor, and possibly init, goal_test, and path_cost. Then you will create instances of your subclass and solve them with the various search functions.""" add def init (self, initial, goal=none): """The constructor specifies the initial state, and possibly a goal state, if there is a unique goal. Your subclass's constructor can other arguments.""" self.initial = initial self.goal = goal def successor(self, state): """Given a state, return a sequence of (action, state) pairs reachable from this state. If there are many successors, consider an iterator that yields the successors one at a time, rather than building them all at once. Iterators will work fine within the framework.""" successors=[] symmetry=false for action in state.legalmoves(): new_state = Node(state, action) successors.append((action, new_state)) return successors the def goal_test(self, state): """Return True if the state is a goal. The default method compares state to self.goal, as specified in the constructor. Implement this method if checking against a single self.goal is not enough.""" if state.pegsleft() == 1 and state.board[3][3]==true: print "Grattis till vinsten! Kulan i mitten och allt! :D" self.goal = True elif state.pegsleft() == 1: print "Grattis till vinsten!" self.goal = True else: self.goal = False 16
17 return self.goal def game(self, state): for x in range(7): for y in range(7): if (x,y) not in inactiveboard: activeboard.append((x,y)) winning_node=tree_search(problem1, []) for s in winning_node.path(): s.printboard() class Queue: """Queue is an abstract class/interface. There are three types: Stack(): A Last In First Out Queue. FIFOQueue(): A First In First Out Queue. PriorityQueue(lt): Queue where items are sorted by lt, (default <). Each type supports the following methods and functions: q.append(item) -- add an item to the queue q.extend(items) -- equivalent to: for item in items: q.append(item) q.pop() -- return the top item from the queue len(q) -- number of items in q (also q. len()) Note that isinstance(stack(), Queue) is false, because we implement stacks as lists. If Python ever gets interfaces, Queue will be an interface.""" def init (self): abstract def extend(self, items): for item in items: self.append(item) def Stack(): """Return an empty list, suitable as a Last-In-First-Out Queue.""" return [] class FIFOQueue(Queue): """A First-In-First-Out Queue.""" def init (self): self.a = []; self.start = 0 def append(self, item): self.a.append(item) def len (self): return len(self.a) - self.start def extend(self, items): self.a.extend(items) def pop(self): e = self.a[self.start] self.start += 1 if self.start > 5 and self.start > len(self.a)/2: self.a = self.a[self.start:] self.start = 0 return e def tree_search(problem, fringe): """Search through the successors of a problem to find a goal. The argument fringe should be an empty queue. Don't worry about repeated paths to a state. [Fig. 3.8]""" 17
18 fringe.append((none, Node())) while fringe: node = fringe.pop()[1] if problem.goal_test(node): return node fringe.extend(problem.successor(node)) return None def breadth_first_tree_search(problem): "Search the shallowest nodes in the search tree first. [p 74]" return tree_search(problem, FIFOQueue()) inactiveboard=[(0,0),(0,1),(1,0),(1,1),(0,5),(0,6),(1,5),(1,6),(5,0),(5,1), (6,0),(6,1),(5,5),(5,6),(6,5),(6,6)] activeboard=[] node1=node() problem1 = Problem(node1) problem1.game(node1) 18
Lektion 2: Sökagenter. Robin Keskisärkkä
Lektion 2: Sökagenter Robin Keskisärkkä Lektionens innehåll Introduktion till laboration 2 Implementation av en sökalgoritm Livekodning Konfrontera ett liknande problem själva Extra: Heuristisk sökning
Övning 3 - Tillämpad datalogi 2012
/home/lindahlm/activity-phd/teaching/12dd1320/exercise3/exercise3.py September 14, 20121 0 # coding : latin Övning 3 - Tillämpad datalogi 2012 Summering Vi gick igenom problemträd, sökning i problem träd
Nu lär vi oss tre i rad
Nu lär vi oss tre i rad Hanna Johansson HT 2016 729G43 Sammanfattning Tre i rad är ett enkelt spel som de flesta förstår sig på och är ett väldigt vanligt problem att försöka lösa just maskinellt. I den
Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4
Grafer, traversering Koffman & Wolfgang kapitel 1, avsnitt 4 1 Traversering av grafer De flesta grafalgoritmer innebär att besöka varje nod i någon systematisk ordning precis som med träd så finns det
Övning 1 - Abstrakta datatyper
/home/lindahlm/activity-phd/teaching/12dd1320/exercise1/exercise1.py September 3, 20121 0 # coding : latin Övning 1 - Abstrakta datatyper 18 Summering Vi gick igenom betydelsen av abstrakta datatyper/datastrukturer.
Sätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Programmering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
Mer grafik. Jan Erik Moström
Mer grafik from Tkinter import * root = Tk() mf = Frame(root) mf.pack() cv = Canvas(mf) o1 = cv.create_oval(100,100,80,80,outline="red",fill="blue", width=2) o2 = cv.create_oval(10,10,80,80,outline="red",fill="green",
Grundläggande datalogi - Övning 3
Grundläggande datalogi - Övning 3 Björn Terelius November 14, 2008 Utskrift av stackar Tornen i Hanoi Principerna för rekursion: Hitta ett enkelt basfall (som har en känd lösning). Reducera varje annat
Grundläggande datalogi - Övning 2
Grundläggande datalogi - Övning 2 Björn Terelius November 7, 2008 Klasser skapas med nyckelordet class Klasser Konstruktorer och destruktorer Undantagshantering class MyClass: Docstring and doctests for
Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""
Per Sedholm DD1320 (tilda11) 2011-09-02 Övning 1 Abstrakta datatyper 1. Stacken -*- coding: utf-8 -*- """Classroom exercise 1, example 1.""" class Stack: """A representation of a last-in-first-out (LIFO)
Föreläsning 13 och 14: Binära träd
Föreläsning 13 och 14: Binära träd o Binärträd och allmänna träd o Rekursiva tankar för binärträd o Binära sökträd Binärträd och allmänna träd Stack och kö är två viktiga datastrukturer man kan bygga av
Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.
Moduler Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program. Vi har också ofta behov av att skapa överblick i våra program. Som ett
LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik
LUNDS TEKNISKA HÖGSKOLA Institutionen för Elektro- och Informationsteknik SIGNALBEHANDLING I MULTIMEDIA, EITA50, LP4, 209 Inlämningsuppgift av 2, Assignment out of 2 Inlämningstid: Lämnas in senast kl
Graphs (chapter 14) 1
Graphs (chapter ) Terminologi En graf är en datastruktur som består av en mängd noder (vertices) och en mängd bågar (edges) en båge är ett par (a, b) av två noder en båge kan vara cyklisk peka på sig själv
Fredag 10 juni 2016 kl 8 12
KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,
Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9
Quicksort Koffman & Wolfgang kapitel 8, avsnitt 9 1 Quicksort Quicksort väljer ett spcifikt värde (kallat pivot), och delar upp resten av fältet i två delar: alla element som är pivot läggs i vänstra delen
Länkade listor, stackar och köer
Länkade listor, stackar och köer I fortsättningen ska vi ta upp några olika abstrakta datatyper. De kan ses som enkla verktyg i en verktygslåda som ska göra det lättare att programmera. Några av dessa
Grundläggande datalogi - Övning 1
Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b
Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två
Binära träd Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två gånger, talar man om binära träd. Sådana
Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.
Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D. tobias@dsv.su.se Notera att exemplen är i Python 2.5 För att översätta till Python 3.0, gör följande ändringar print(x,y) istället för print x,y input("ett
Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2
Självbalanserande träd AVL-träd Koffman & Wolfgang kapitel 9, avsnitt 1 2 1 Balanserade träd Nodbalanserat träd: skillnaden i antalet noder mellan vänster och höger delträd är högst 1 Höjdbalanserat träd:
729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer
729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser
Objektsamlingar i Java
1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och
1. Compute the following matrix: (2 p) 2. Compute the determinant of the following matrix: (2 p)
UMEÅ UNIVERSITY Department of Mathematics and Mathematical Statistics Pre-exam in mathematics Linear algebra 2012-02-07 1. Compute the following matrix: (2 p 3 1 2 3 2 2 7 ( 4 3 5 2 2. Compute the determinant
Datalogi för E Övning 3
Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna
Genetisk programmering i Othello
LINKÖPINGS UNIVERSITET Första versionen Fördjupningsuppgift i kursen 729G11 2009-10-09 Genetisk programmering i Othello Kerstin Johansson kerjo104@student.liu.se Innehållsförteckning 1. Inledning... 1
Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes
Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-18 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Prims algoritm. Kruskals algoritm. Djupet först-sökning. Cykel
Tentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4
Träd, binära träd och sökträd Koffman & Wolfgang kapitel 6, avsnitt 1 4 1 Träd Träd är ickelinjära och hierarkiska: i motsats till listor och fält en trädnod kan ha flera efterföljare ( barn ) men bara
Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111
/home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111 0 # coding : latin Sammanfattning Gick igenom listor, dictionary, felhantering, strängjämförelser, split(), rstrip()
Dugga Datastrukturer (DAT036)
Dugga Datastrukturer (DAT036) Duggans datum: 2012-11-21. Författare: Nils Anders Danielsson. För att en uppgift ska räknas som löst så måste en i princip helt korrekt lösning lämnas in. Enstaka mindre
Föreläsning 7 Datastrukturer (DAT037)
Föreläsning 7 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-21 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Förra
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-23 Idag Mer om grafer: Minsta uppspännande träd (för oriktade grafer). Djupet först-sökning. Minsta uppspännande träd Träd (utan rot)
Preschool Kindergarten
Preschool Kindergarten Objectives CCSS Reading: Foundational Skills RF.K.1.D: Recognize and name all upper- and lowercase letters of the alphabet. RF.K.3.A: Demonstrate basic knowledge of one-toone letter-sound
Språket Python - Del 1 Grundkurs i programmering med Python
Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR
Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?
Föreläsning 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?
Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program
Tentamen i Introduktion till programmering
Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:
Föreläsning 9 Innehåll
Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon
Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
Selektion och iteration
Selektion och iteration TDDD73 Funktionell och imperativ programmering i Python Föreläsning 6 Peter Dalenius Institutionen för datavetenskap 2014-09-15 Översikt Hur utformar man villkor för framför allt
Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18
Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18 Dagens föreläsning Betygskriterier P-redovisning Komplettering Vad händer om man inte hinner klart? Plussa för betyg E ska
Ordlistor, filhantering och ut på webben. Linda Mannila 20.11.2007
Ordlistor, filhantering och ut på webben Linda Mannila 20.11.2007 Vad kan vi nu? Primitiva datatyper Tal, strängar, booleska värden Samlingsdatatyp Listan Utskrift Indata Felhantering Funktioner och moduler
Lösningar Datastrukturer TDA
Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både
Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!
Python Mer om datatyper Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam! Datatyper Dictionaries - {1: camelot,2: shrubbery } Tupler - (1,2,3,) 1 Lite om strängar Strängar innehåller specialtecken
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Föreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Writing with context. Att skriva med sammanhang
Writing with context Att skriva med sammanhang What makes a piece of writing easy and interesting to read? Discuss in pairs and write down one word (in English or Swedish) to express your opinion http://korta.nu/sust(answer
Föreläsning 8: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och
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
Styrteknik: Binära tal, talsystem och koder D3:1
Styrteknik: Binära tal, talsystem och koder D3:1 Digitala kursmoment D1 Boolesk algebra D2 Grundläggande logiska funktioner D3 Binära tal, talsystem och koder Styrteknik :Binära tal, talsystem och koder
Pre-Test 1: M0030M - Linear Algebra.
Pre-Test : M3M - Linear Algebra. Test your knowledge on Linear Algebra for the course M3M by solving the problems in this test. It should not take you longer than 9 minutes. M3M Problem : Betrakta fyra
Tentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
PYTHON SNABBREPETITION MEN FÖRST LITE ALLMÄNT OM PROGRAMMERING 729G04 PYTHON 2. Dagens Python
Dagens Python 729G04 PYTHON 2 Mer om funktioner Villkorssatser JODY FOO Department of Computer and Information Science (IDA) Linköping University, Sweden Linköpings universitet 1 2 MEN FÖRST LITE ALLMÄNT
Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med
Par m 328 feet. Lång höger sväng. Korgen står placerad i en skogsglänta OB-linje på vänster sida.
1 100 m 328 feet Lång höger sväng. Korgen står placerad i en skogsglänta -linje på vänster sida. Long right turn. Basket are placed in a forrest glade. -line on the left side. Snälla, skräpa ej ner vår
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och
Föreläsning 8 Datastrukturer (DAT037)
Föreläsning 8 Datastrukturer (DAT037) Fredrik Lindblad 1 22 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
ASSEMBLY INSTRUCTIONS SCALE CIRCLE - STANDARD
ASSEMBLY INSTRUCTIONS ALL COMPONENTS Metal profile 0 mm Gripper Ceiling attachments Screws for ceiling attachements (not included) Wires Metal profile 60 mm Metal profile 00 mm Felt - Full Felt - Half
Att skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
Tentamen Datastrukturer, DAT037 (DAT036)
Tentamen Datastrukturer, DAT037 (DAT036) Datum, tid och plats för tentamen: 2017-08-17, 8:30 12:30, M. Ansvarig: Fredrik Lindblad. Nås på tel nr. 031-772 2038. Besöker tentamenssalarna ca 9:30 och ca 11:00.
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET
UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt
TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 2017-04-06, kl 17-19 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i
Libers språklåda i engelska Grab n go lessons
Libers språklåda i engelska 7-9 - Grab n go lessons PROVLEKTION Libers språklåda i engelska Grab n go lessons (47-90988-9) Författarna och Liber AB Får kopieras 1 Two stories in one Förberedelser Kopiera
Module 1: Functions, Limits, Continuity
Department of mathematics SF1625 Calculus 1 Year 2015/2016 Module 1: Functions, Limits, Continuity This module includes Chapter P and 1 from Calculus by Adams and Essex and is taught in three lectures,
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
Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.
är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista ADT Stack Grundprinciper: En stack
ASSEMBLY INSTRUCTIONS SCALE SQUARE - STANDARD
ASSEMBLY INSTRUCTIONS ALL COMPONENTS Metal profile 0 mm Gripper Ceiling attachments Screws for ceiling attachements (not included) Wires Metal profile 60 mm Metal profile 00 mm Felt - Full Felt - Half
Installation av F13 Bråvalla
Website: http://www.rbdesign.se Installation av F13 Bråvalla RBDESIGN FREEWARE - ESCK Norrköping-Bråvalla 1. Ladda ner och packa upp filerna i en mapp som du har skapat på ett lättöverskådligt ställe utanför
12.6 Heat equation, Wave equation
12.6 Heat equation, 12.2-3 Wave equation Eugenia Malinnikova, NTNU September 26, 2017 1 Heat equation in higher dimensions The heat equation in higher dimensions (two or three) is u t ( = c 2 2 ) u x 2
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Föreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-11-20 Idag Grafer: Terminologi. Datastrukturer. Topologisk sortering. Kortaste vägen. Bredden först-sökning. Dijkstras algoritm. (Vi får
Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.
Skolan för Datavetenskap och kommunikation Idag: DD1311 Programmeringsteknik med PBL Granskning Felhantering GUI Föreläsning 15 På torsdag: Mer om GUI På grupptimmen: genomgång av granskningsprotokollet
TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16
TDDC74 Programmering: Abstraktion och modellering Dugga 2, 207-04-06, kl 4-6 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis i svårighetsordning.
Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 05 June 2017, 14:00-18:00. English Version
Kurskod: TAMS28 MATEMATISK STATISTIK Provkod: TEN1 5 June 217, 14:-18: Examiner: Zhenxia Liu (Tel: 7 89528). Please answer in ENGLISH if you can. a. You are allowed to use a calculator, the formula and
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
Lösningsförslag till exempeltenta 1
Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i
Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk
Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program
Tentamen MMG610 Diskret Matematik, GU
Tentamen MMG610 Diskret Matematik, GU 2017-01-04 kl. 08.30 12.30 Examinator: Peter Hegarty, Matematiska vetenskaper, Chalmers/GU Telefonvakt: Peter Hegarty, telefon: 0766 377 873 Hjälpmedel: Inga hjälpmedel,
Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Kurskod: TAIU06 MATEMATISK STATISTIK Provkod: TENA 17 August 2015, 8:00-12:00. English Version
Kurskod: TAIU06 MATEMATISK STATISTIK Provkod: TENA 17 August 2015, 8:00-12:00 Examiner: Xiangfeng Yang (Tel: 070 2234765). Please answer in ENGLISH if you can. a. Allowed to use: a calculator, Formelsamling
Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser
Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och
Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg 2013 12 19 1. a) En samling element där insättning och borttagning
Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista
Föreläsning 4 Kö Föreläsning 4 ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista ADT Kö Grundprinciper: En kö fungerar som en kö. Man fyller på den längst bak och
Support Manual HoistLocatel Electronic Locks
Support Manual HoistLocatel Electronic Locks 1. S70, Create a Terminating Card for Cards Terminating Card 2. Select the card you want to block, look among Card No. Then click on the single arrow pointing
if (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
EXPERT SURVEY OF THE NEWS MEDIA
EXPERT SURVEY OF THE NEWS MEDIA THE SHORENSTEIN CENTER ON THE PRESS, POLITICS & PUBLIC POLICY JOHN F. KENNEDY SCHOOL OF GOVERNMENT, HARVARD UNIVERSITY, CAMBRIDGE, MA 0238 PIPPA_NORRIS@HARVARD.EDU. FAX:
Introduktion till programmering SMD180. Föreläsning 9: Tupler
Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]
ASSEMBLY INSTRUCTIONS SCALE - SYSTEM
ASSEMBLY INSTRUCTIONS 60 mm 00 mm 600 mm 000 mm R50 mm ALL COMPONENTS Metal profile 60 mm (start and end of system) Metal profile connection Wire Felt square Metal profile 00 mm Metal profile connection
FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR
FÖRBERED UNDERLAG FÖR BEDÖMNING SÅ HÄR Kontrollera vilka kurser du vill söka under utbytet. Fyll i Basis for nomination for exchange studies i samråd med din lärare. För att läraren ska kunna göra en korrekt
Webbregistrering pa kurs och termin
Webbregistrering pa kurs och termin 1. Du loggar in på www.kth.se via den personliga menyn Under fliken Kurser och under fliken Program finns på höger sida en länk till Studieöversiktssidan. På den sidan
Calculate check digits according to the modulus-11 method
2016-12-01 Beräkning av kontrollsiffra 11-modulen Calculate check digits according to the modulus-11 method Postadress: 105 19 Stockholm Besöksadress: Palmfeltsvägen 5 www.bankgirot.se Bankgironr: 160-9908
Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS
Namn Stil Dokumentation Objekt-orienterad programmering Dept. of Computer Science Umeå University jem@cs.umu.se OBS OBS OBS OBS OBS OBS OBS OBS Detta är inget gnäll på någon speciell utan jag ser detta