729G74 IT och programmering, grundkurs Tema 2. Föreläsning 3 Jody Foo, jody.foo@liu.se
Föreläsningsöversikt Information i grafstrukturer Diskret matematik Relationer: kopplingar mellan mängder Funktioner som brygga mellan mängder Grafer och träd som informationsstrukturer Python logiska operatorer exempel på användning av while-loopen
Information i grafstrukturer
Exempel Introuppgifter Introuppgift 1 Introuppgift 2 Introuppgift 3 DM-uppg 1 Tema 1 Py-uppg 1 DM-uppgifter DM-uppg 2 Tema 2 Py-uppg 2 Pythonuppgifter DM-uppg 3 Tema 3 Py-uppg 3 Temauppgift 1 Temauppgift 2 Temauppgift 3 Temauppgifter
Mängdrepresentationer av fyrkanterna T = { t 1, t 2, t 3 } D = { d 1, d 2, d 3 } P = { p 1, p 2, p 3 } U t = { u t1, u t2, u t3 } U i = { u i1, u i2 u i3 } U = { d, p, u t, u i }
Hur representerar vi strecken? Varje streck får vara en mängd där start och slut finns med. Vi samlar sedan alla dessa i en mängd: en mängd av streck E = { {d, d1}, {d, d2}... {d1,t1}, {ui, ui1},... }
Relationer kopplingar mellan mängder
Repetition: par, tupler En 2-tupel är ett ordnat par av värden. Notation: (a, b) Eftersom paret är ordnat gäller (a, b) (b, a) En n-tupel är en ändlig sekvens av n stycken komponenter (jmf med element i en mängd) ordnade par (även kallade för enbart par) och n-tupler är tupler.
Kryssprodukt / Kartesisk produkt A = { a, b, c }, B = { 1, 2, 3 } A B är kryssprodukten av A och B (utläses "A kryss A") A B = { (a,1), (a,2), (a,3), (b,1), (b,2), (b,3), (c,1), (c,2), (c,3), } a b 1 2 3 (a,1) (a,2) (a,3) (b,1) (b,2) (b,3) c (c,1) (c,2) (c,3)
Relationer Informellt: en relation mellan två mängder A och B är en mängd som innehåller par med en komponentfrån A och en komponent från B. En relation "på mängden A" är en relation mellan mängden A och sig själv. Om A = { a, b, c } får vi alla möjliga tupler som kan ingå i relationen R på A genom att ta A A.
Relationer En relation mellan två mängder A och B är en delmängd av A B. En relation på mängden A är en delmängd av A A. Notation Låt A och B vara mängder och och R vara en relation mellan A och B. Om (a, b) R kan vi skriva arb som utläses "a är relaterat till b"
Funktioner som bryggor mellan mängder
Funktion En funktion är en "regel" som kopplar varje element i en mängd, till exakt ett element i en annan mängd.
ƒ : A B Funktionen ƒ går från mängden A till mängden B. A är funktionens definitionsmängd, D f. B är funktionens målmängd. Om vi får en mer specifik definition av ƒ, t.ex. ƒ(x) = 2x, så kan vi även beskriva funktionens värdemängd. Värdemängden V f är då { y : y ƒ(x) }. Vidare, om vi vet att A är de naturliga talen N, kan vi säga att värdemängden är { y : y 2x, x N }
Grafer och träd
XML - hierarkisk informationsstruktur XML är en hierarkisk informationsstruktur Alla element förutom rot-elementet har exakt en förälder Rot-elementet har exakt 0 förädrar Detta är en speciell typ av graf.
Grafer En graf är (informellt) en en mängd element och kopplingar mellan dessa element. Trädstrukturen (som vi t.ex. hittar i XML) är en speciell sorts graf
Trädstruktur book author title year contents firstname lastname Tractatus logicophilosophicus 1921 chapter Ludvig Wittgenstein title section Inledning title paragraph 1. Wittgenstein och Tractacus
Från XML till graf a book a author title year b c d b c d Ludvig Wittgenstein Tractatus logicophilosophicus 1921 e f g e f g
Från XML till graf Noder/Hörn: {a, b, c, d, e, f, g} Kanter/bågar: strecken mellan elementen a b c d e f g
Oriktade och riktade grafer
Rotat träd: book author title year contents firstname lastname Tractatus logicophilosophicus 1921 chapter Ludvig Wittgenstein title section Inledning title paragraph 1. Wittgenstein och Tractacus
Grafer på formen G = (V, E)
Matematisk representation av en graf V är en mängd med noder, t.ex. { a, b, c, d } E är en mängd av kanter (strecken). Varje kant är en mängd som innehåller de två noder som kanten går mellan. Exempel: { { a, b }, { a, c } } Vi kan då definiera grafen G som G = (V, E)
Matematisk representation av en riktad graf V är en mängd med noder, t.ex. { a, b, c, d } E är en mängd av kanter (strecken). Om vi vill representera riktning hos kanterna, dvs göra dem till pilar, låter vi dem vara tupler istället för mängder. Exempel: E = { (a, b), (a, c) } Vi kan då definiera den riktade grafen G som G = (V, E)
Grad, ingrad/utgrad
logiska operatorer
Logiska operatorer används för att kombinera jämförelser, t.ex. "om det är 10 grader kallt och det kommer nederbörd" Logiska operatorer i Python: and, or, not
Exempel med and och or # om value är mellan 5 och 10 if value >= 5 and value <= 10: print("value var mellan 5 och 10") # om value är 10 eller 20 if value == 10 or value == 20: print("value var 10 eller 20")
Logiska operatorer opererar på sanningsvärden Jämför 5 + 4 9 med True and True True. De logiska operatorerna and och or tar två argument och returnerar ett svar som antingen är True eller False. x and y: True om både x och y är True. False i alla andra fall. x or y: True om x är True, eller om y är True, eller om x och y är True. Bara False om både x och y är False.
Logiska operatorn not Negerar det sanningsvärde det står framför. not True ger alltså False och not False ger True
Logiska operatorer x y resultat x resultat x and y True True True not x True False True False False False True False False False False x y resultat x or y True True True True False True False True True False False False False True
while-loopen några tillämpningar
Leta efter ett värde i en lista https://trinket.io/python3/81db226056