729G04 Programmering och diskret matematik

729G04 Programmering och
diskret matematik
Kursintroduk+on Jody Foo <[email protected]> Föreläsningsöversikt
⁃  Allmän kursinforma9on ⁃  Vad är diskret matema9k ⁃  Vad är programmering Allmän
kursinformaion
Att läsa på universitetet
⁃  Vad jag som lärare tror om er: ⁃  Ni är intresserade av universitetsstudier ⁃  Ni är i alla fall nyfikna på kogni9ons-­‐vetenskap ⁃  Ni läser kursinforma9on och tar ansvar för era egna studier Att läsa på universitetet
⁃  Kursinforma9on ska finnas på kurshemsidorna/Lisam ⁃  Fråga om något är oklart! Universitetskurser
⁃  Formell struktur ⁃  Personal och roller Kursnamn och kurskod
⁃  Namn: Programmering och diskret matema9k ⁃  Kurskod: 729G04 ⁃  Kurskoden är vik$g Examination
⁃  Kurser examineras. ⁃  Varje kurs har minst eR examina+onsmoment. ⁃  Varje examina9onsmoment har en provkod. ⁃  Resultat på examina9onmoment registreras via provkod i Ladok. ⁃  Ni ser resultaten från Ladok i studentportalen. ⁃  EVer aR ni fåR godkänt på alla examina9onsmoment får ni betyg på hela kursen. 729G04 – Examinationsmoment
och provkoder
⁃  UPG1 – HemuppgiV i diskretmatema9k ⁃  LAB5 – Individuella datorlabora9oner ⁃  LAB6 – Datorlabora9oner i par ⁃  TEN3 – Datorsalstenta Personal och roller
⁃  Administratör: har hand om allt som ska registreras formellt: betyg, kursregistrering m.m. ⁃  Assistent: Lek9onsassistent, labbassistent ⁃  Examinator: examinerar och säRer betyg ⁃  Kursassistent: har hand om "opera9v" kurslogis9k ⁃  Kursansvarig: Ansvarar för kursen under kursens gång ⁃  Lärare: Håller föreläsningar Personal på 729G04
⁃  Examinator och kursansvarig: Jody Foo ⁃  Kursassistent: Evelina Rennes ⁃  Lärare i diskret matema+k: Anders Märak Leffler ⁃  Lärare i programmering: Jody Foo Personal på 729G04
⁃  Lek+onsassistenter i DM: Anders Märak Leffler, Johan Falkenjack ⁃  Labbassistenter: Evelina Rennes, Ida Palm, Per Fallgren & Sarah Albertsson ⁃  Kursadministratör: Annelie Almquist Kurshemsidan
http://www.ida.liu.se/~729G04!
E-post
[email protected]!
Kursplan,
kursmål och
kursinnehåll
Kursplan
⁃  Varje kurs har en kursplan ⁃  Du hiRar kursplanen på kurshemsidan och via kogvetprogrammets sida för studenter ⁃  Kursplanen består bl.a. av ⁃  kursmål: kunskapsmål som examineras ⁃  kursinnehåll: översikt över innehåll Kursmål för 729G04
⁃  använda begrepp och modeller från grundläggande diskret matema9k ⁃  konstruera grundläggande datorprogram och formella modeller för enkla kogni9onsvetenskapliga 9llämpningar ⁃  förklara vad en algoritm är och 9llämpa grundläggande algoritmer ⁃  använda olika datatyper/datastrukturer ⁃  använda olika typer av styrstrukturer ⁃  visa förståelse för vad datormodellering innebär och ha förmåga aR konstruera enkla datorprogram Kursinnehåll för 729G04
⁃  grundläggande diskret matema9k, t ex mängder, rela9oner, funk9oner, diskreta datastrukturer, defini9oner och formella språk, ⁃  datatyper/datastrukturer, t ex tal, strängar, tupler, listor, träd, sekven9ella och hierarkiska strukturer, arrayer, länkade strukturer, uppslagsbaserade strukturer, ⁃  styrstrukturer, t ex sekvens, selek9on, itera9on, rekursion, villkor ⁃  algoritmer och datastrukturer, t ex för sökning, urval, omformning, och uppslagsalgoritmer ⁃  handhavande av aktuella datorsystem ⁃  översiktlig introduk9on 9ll datavetenskap ⁃  principer för abstrak9on ⁃  programmeringsspråket Python ⁃  felsökning 729G04 - Examinationsmoment
⁃  UPG1 1,5hp – HemuppgiV i diskretmatema9k ⁃  LAB5 1 hp – Individuella datorlabora9oner ⁃  LAB6 1 hp – Datorlabora9oner i par ⁃  TEN3 2,5 hp – Datorsalstenta ⁃  För betyget G: Alla moment godkända ⁃  För betyget VG: Alla moment godkända & VG på tentan Hemuppgift, tenta, deadlines för
labbar
⁃  HemuppgiQ i diskret matema+k vecka 39, kompleRering vecka 43 ⁃  Datorsalstenta 17 december 2015, omtenta 18 januari 2016 Godkänd bok får tas med. Test av tentamiljön kommer erbjudas. ⁃  Labbar Förstagångsinlämningar 11 januari 2016 KompleReringar 25 januari 2016 TIPS: Gör labbarna under terminen var i fas. ⁃  Tentasök: hRp://www4.student.liu.se/tentasearch/ Kurslitteratur
⁃  Strandh, R. 2014. Introduk*on *ll Datavetenskap. ⁃  Kuhlman och Dahllöf. 2014. Matema*k för språkteknologer. (PDF:er) ⁃  Miller & Ranum. 2013. How to Think Like a Computer Scien*st – Learning with Python: Interac*ve Edi*on (Using Python 3.X). http://interactivepython.org/runestone/
static/thinkcspy/index.html!
⁃  Downey. 2012. Think Python – How to Think Like a Computer Scien9st. http://www.greenteapress.com/
thinkpython!
Översiktsschema
⁃  Kursen är på 6hp ⁃  UtspriR över 18 veckor ger ca 9h/vecka Diskret
matematik
hRp://www.soVicons.com/designers/deleket Diskret matematik
⁃  diskret = åtskiljd ⁃  diskret ≠ obemärkt ⁃  Gren av matema+ken ⁃  logik ⁃  mängdlära ⁃  kombinatorik ⁃  graVeori ⁃  topologi Diskret och kontinuerlig
Diskret matematik i denna kurs
⁃  Mängder ⁃  Rela9oner ⁃  Funk9oner ⁃  Algoritmer ⁃  Grafer och träd Varför är diskret matematik
viktigt för en kognitionsvetare?
⁃  ER formellt språk för aR diskutera teorier och resonera inom/om t.ex. diskreta modeller i ⁃  Ar9ficiell Intelligens ⁃  Språkteknologi ⁃  Programmering ⁃  Databaser ⁃  Denna kurs tar upp begrepp och deras nota+on, samt hur dessa används. Diskreta modeller
⁃  Världen är komplex och oVast inte diskret, men diskreta modeller är läRare aR jobba med: ⁃  informa9on, kunskapsrepresenta9on ⁃  språk (t.ex. bokstäver och ord) ⁃  spelvärldar ⁃  internt 9llstånd hos robot/agent ⁃  nätverksstrukturer (t.ex. sociala nätverk, datornätverk) Notation
f (x) = 2x + 3
{x | x 2 N, x < 10}
Begrepp
Exempel från uppgiftsanalys
⁃  Task Layer Diagram – eR säR aR abstrahera och analysera uppgiVer (Arnowitz 2004) that at least the tasks and relationships (e.g., dependencies) appear in this flow diagram.
In our example, we identified all tasks and drew them on a flip chart. Then we checked
all tasks for dependencies. For each task that was dependent on another, we drew an arrowed
line going from the nondependent task to the dependent task. The resulting drawing looked
something like Fig. 11.3.
Initialt uppgiftsflöde för callcenterapplikation
Open file
Add
record
Input
name
Find
Make call
Check
duplicates
Create
record
Input
telephone
FIG. 11.3. Task set in an application flow chart.
Somehow we had to “cut the cycle” to escape from this deadlock situation. For example,
one of the cycles in Fig. 11.3 is the mutual dependency between “Add record” and “Make
call.” When we removed the arrow from “Make call” to “Add record,” we allowed the process
of constructing the layer diagram to be restarted by placing the “Add record” in Layer 2. Note
that when an arrow is deleted, we do remove information from the flow chart (e.g., Fig. 11.3),
for we want to keep this view of the tasks as well.
Cykler borttagna och tidsflöde
etablerat
Open file
0
Find
1
Add
record
2
Input
name
Input
telephone
3
Create
record
4
Make call
5
Check
duplicates
6
FIG. 11.4. Layering result after “peeling.”
The deletion of arrows in this step does not lead to information loss like the deletion of
arrows in the previous step. We do not really delete them: They are demoted from being
“explicit” to being “implicit” arrows in order to accommodate the transitivity of the partial
ordering. Consequently, their deletion is not a creative activity and could easily be automated
in a software tool that supports the construction of Task Layer Maps. (An important issue to
consider is whether the gain in time is preferred over the gain in discussion with team members.)
Redundanta beroenden
borttagna
FIG. 11.5. Task Layer Map.
Uppgiftsanalysen
⁃  en diskret modell ⁃  består av en mängd uppgiVer + riktade rela9oner mellan dem: en graf ⁃  med hjälp av kunskaper i diskret matema9k får vi de begrepp vi behöver för aR representera deRa i en dator ⁃  vi kan sedan implementera eR program som hjälper oss skapa eR sådant diagram Modellering med hjälp av diskret
matematik
⁃  Algoritmer ⁃  eR säR aR lösa problem som kan implementeras av datorprogram ⁃  Exempel på uppgiVer som kan lösas med en algoritm ⁃  sökning (t.ex. eVer en persons telefonnummer i en lista) ⁃  tolkning/generering av språk ⁃  analys av sociala nätverk Vad är
programmering?
D Sharon PruiR: hRp://www.flickr.com/photos/pinksherbet/ Programmering och kogvet
⁃  Datainsamling ⁃  Interak9onsdesign, interak9ons-­‐ och webbprogrammering ⁃  Språkteknologi ⁃  Simuleringar ⁃  Ar9ficiell intelligens ⁃  Närmaste fram+den ⁃  729G06 Programmering och logik (Kogvet 1, VT) ⁃  729G09 Språkvetenskaplig databehandling (Kogvet 1, VT) ⁃  729G43 Ar9ficiell Intelligens (Kogvet 2, HT) Varför programmera?
⁃  För aR man är lat... ⁃  För aR datorn kan göra det snabbare ⁃  För aR man vill simulera något ⁃  För aR man vill automa9sera något ⁃  För aR det är roligt! ⁃  För aR man vill skapa något ⁃  För aR datorn är bäRre på aR hantera den typen av data ⁃  ... ifttt.com
Att lära sig programmera
⁃  Träning ⁃  Tid ⁃  Kunskap hRp://www.flickr.com/photos/senoranderson/3363262014/ Vad gör man när man
programmerar?
⁃  Problemlösning ⁃  Dela upp problemet i delproblem ⁃  URrycker sig på eR säR så aR en dator förstår ⁃  Logiskt ⁃  Tydligt ⁃  Små steg i taget patrick h. lauke: hRp://www.flickr.com/photos/redux/ Tekniken bakom
programmering
En dator
Program / Applika9oner Opera9vsystem Hårdvara Hårdvara
Operativsystem
⁃  Windows ⁃  Mac OS X ⁃  Linux ⁃  BeOS, Solaris, iOS, Android ... Program
⁃  Word, Powerpoint ⁃  Webbläsare ⁃  Spel ⁃  Videouppspelningsprogram ⁃  ... En dator
Program / Applika9oner Opera9vsystem Hårdvara A program is a sequence of instructions that
specifies how to perform a computation.
The Way of the Program
How to Think Like a Computer Scientist
Program
⁃  Program skrivs med hjälp av eR programmeringsspråk ⁃  Programmeringsspråk = formellt språk ⁃  Svenska, engelska, tyska osv = naturliga språk Program
⁃  Formella språk skiljer sig från naturliga språk genom aR de: ⁃  har en strikt syntax ⁃  saknar tvetydighet ⁃  är bokstavliga, dvs ingen9ng "mellan raderna" Lista över
programmeringsspråk
HAI!
CAN HAS STDIO?!
PLZ OPEN FILE "LOLCATS.TXT"?!
AWSUM THX!
VISIBLE FILE!
O NOES!
INVISIBLE "ERRROR!"!
KTHXBYE!
Högnivå- och lågnivåspråk
Fibonaccital
⁃  Summan av de två föregående fibonaccitalen. De första två är 0 och 1 ⁃  0, 1 ⁃  0, 1, 1 ⁃  0, 1, 1, 2 ⁃  0, 1, 1, 2, 3 ⁃  0, 1, 1, 2, 3, 5 ⁃  ... Fibonaccital
Maskinkod
8B542408
FA027706
B9010000
C84AEBF1
83FA0077 06B80000 0000C383!
B8010000 00C353BB 01000000!
008D0419 83FA0376 078BD98B!
5BC3!
A func9on in 32-­‐bit x86 machine code to calculate the nth Fibonacci number fib:!
mov edx, [esp+8]!
cmp edx, 0!
ja @f!
mov eax, 0!
ret!
!
@@:!
cmp edx, 2!
ja @f!
mov eax, 1!
ret!
!
@@:!
push ebx!
mov ebx, 1!
mov ecx, 1!
!
@@:!
lea
cmp
jbe
mov
mov
dec
jmp @b!
!
@@:!
pop ebx!
ret!
eax,
edx,
@f!
ebx,
ecx,
edx!
[ebx+ecx]!
3!
ecx!
eax!
The same Fibonacci number calculator as above, but in x86 assembly language using MASM syntax def fib(n):!
if n == 0:!
return 0!
elif n == 1:!
return 1!
else:!
return fib(n-1) + fib(n-2)!
The same Fibonacci number calculator, but in Python def fib(n):!
if n == 0:!
return 0!
elif n == 1:!
return 1!
else:!
return fib(n-1) + fib(n-2)!
Vad har vi gått igenom idag?
⁃  Allmän kursinforma9on ⁃  Kort om diskret matema9k ⁃  Kort om programmering ⁃  Se Strand kap 1 för en mer detaljerad introduk9on. Nästa föreläsning
⁃  Diskret matema9k med Anders Märak Leffler ⁃  Begrepp: Mängder (alltså inte mängder med begrepp, utan begreppet mängder) http://www.ida.liu.se/~729G04!
!
[email protected]!