Comp Sci 101 Introduction to Computer Science March
- Slides: 38
Comp. Sci 101 Introduction to Computer Science March 30, 2017 Prof. Rodger compsci 101 spring 2017 1
Announcements • Assign 6 due, Assign 7 out due April 6 • APT 8 due Tuesday • APT Quiz 2 Sunday-Tuesday – available 6 pm or earlier on Sunday • Exam 2 Tuesday, April 11 • Today: – Why are dictionaries so fast? – More problem solving with dictionaries – Finish problem from last time 2
Be in the know…. ACM, compsci mailing lists • Association of Computing Machinery (ACM) – Professional organization for computer science – Duke Student ACM Chapter – join for free • Join duke email lists to find out info on jobs, events for compsci students – lists. duke. edu – join lists: • compsci – info from compsci dept • dukeacm – info from student chapter 3
From Last time - Dictionary • Consider the Python dictionary below maps schools to number of students in the ACM Club at their school d = {'duke': 30, 'unc': 50, 'ncsu': 40, 'wfu': 50, 'ecu': 80, 'meridith': 30, 'clemson': 80, 'gatech': 50, 'uva': 120, 'vtech': 110} Dictionary to answer which schools have X students? … which schools have groups of students 1 -49, 50 -99, etc? compsci 101 spring 2017 4
Dictionary of schools to number students keys ecu vtech duke clemson wfu unc gatech meridth ncsu uva values 110 50 30 80 40 120 compsci 101 spring 2017 5
Dictionary of schools to number students ecu vtech duke meridith wfu unc gatech clemson ncsu uva 110 30 50 80 40 120 compsci 101 spring 2017 6
Dictionary of schools to number students Dictionary of number students to schools ecu vtech duke meridith wfu unc gatech clemson ncsu uva 110 30 50 80 40 120 compsci 101 spring 2017 7
Dictionary of schools to number students Dictionary of number students to schools ecu vtech duke meridith wfu unc gatech clemson ncsu uva 110 30 50 80 40 120 compsci 101 spring 2017 8
Dictionary of schools to number students Dictionary of number students to schools vtech ecu vtech duke meridith wfu unc gatech clemson ncsu uva 110 30 50 80 40 120 compsci 101 spring 2017 duke meridith wfu gatech unc ecu clemson ncsu uva 9
Inverted Dictionary bit. ly/101 s 17 -0330 -1 • Start with dictionary of keys to values – Schools to number of students • Use it to build an inverted dictionary of values to keys (actually list of keys) – Number of students to list of schools • Lets look at the compsci code 101 spring 2017 10
Dictionary of number groups to list of schools duke Meridith ncsu wfu gatech unc ecu clemson 0 -49 50 -99 100 -150 vtech uva compsci 101 spring 2017 11
APT Emails. Course bit. ly/101 s 17 -0330 -2 12
Dictionary Song problem bit. ly/101 s 17 -0330 -3 songs = ["Hey Jude: Let it be: Day Tripper", "Let it be: Drive my car: Hey Jude", "I want to hold your hand: Day Tripper: Help!", "Born to run: Thunder road: She's the one", "Hungry heart: The river: Born to run", "The river: Thunder road: Drive my car", "Angie: Start me up: Ruby Tuesday", "Born to run: Angie: Drive my car"] compsci 101 spring 2017 13
Assignment 7 – Demo Snarky, Evil, Frustrating Hangman • Computer changes secret word every time player guesses to make it "hard" to guess – Must be consistent with all previous guesses – Idea: the more words there are, harder it is • Not always true! • Example of greedy algorithm – Locally optimal decision leads to best solution – More words to choose from means more likely to compsci 101 spring 2017 14 be hung
Canonical Greedy Algorithm • How do you give change with fewest number of coins? – Pay $1. 00 for something that costs $0. 43 – Pick the largest coin you need, repeat compsci 101 spring 2017 15
Greedy not always optimal • What if you have no nickels? – Give $0. 31 in change – Algorithms exist for this problem too, not greedy! compsci 101 spring 2017 16
Snarky Hangman • When you guess a letter, you're really guessing a category (secret word "salty") _ _ _ and user guesses 'a' – "gates", "cakes", "false" are all a the same, in 2 cd position – "flats", "aorta", "straw", "spoon" are all a in different places • How can we help ensure player always has many words to distinguish between? 17
Debugging Output number of misses left: 8 secret so far: _ _ _ _ (word is catalyst ) # possible words: 7070 guess a letter: a number of misses left: 7 a__a___a 1 letters guessed: a … … _a______ 587 (word is designed ) __aa____ 1 # possible words: 3475 … guess a letter: __a_____ 498 ____ 3475 ___a____ 406 … ____a___ 396 compsci 101 spring 2017 # keys = 48 18
Debugging Output and Game Play • Sometimes we want to see debugging output, and sometimes we don't – While using microsoft word, don't want to see the programmer's debugging statements – Release code and development code • You'll approximate release/development using a global variable DEBUG – Initialize to False, set to True when debugging 19 – Ship with DEBUG = False
Look at howto and categorizing words • Play a game with a list of possible words – Initially this is all words – List of possible words changes after each guess • Given template "_ _ _ _", list of all words, and a letter, choose a secret word – Choose all equivalent secret words, not just one – Greedy algorithm, choose largest category compsci 101 spring 2017 20
Computing the Categories • Loop over every string in words, each of which is consistent with guess (template) – This is important, also letter cannot be in guess – Put letter in template according to word – _ _ _ a _ t might become _ _ _ a n t • Build a dictionary of templates with that letter to all words that fit in that template. • How to create key in dictionary? compsci 101 spring 2017 21
Everytime guess a letter, build a dictionary based on that letter • Example: Four letter word, guess o • Key is string, value is list of strings that fit 22
Keys can’t be lists • [“O”, ”_”, ”O”, ”_”] need to convert to a string to be the key representing this list: “O_O_” compsci 101 spring 2017 23
Different. Timings. py Problem: • Start with a large file, a book, hawthorne. txt • For each word, count how many times the word appears in the file • Create a list of tuples, for each word: – Create a tuple (word, count of word) • We will look at several different solutions compsci 101 spring 2017 24
Different. Timings. py Problem: (word, count of word) • Updating (key, value) pairs in structures • Three different ways: 1. Search through unordered list 2. Search through ordered list 3. Use dictionary • Why is searching through ordered list fast? – Guess a number from 1 to 1000, first guess? – What is 210? Why is this relevant? 220? – Dictionary is faster! But not ordered compsci 101 spring 2017 25
Linear search through list o' lists • Maintain list of [string, count] pairs – List of lists, why can't we have list of tuples? [ ['dog', 2], ['cat', 1], ['bug', 4], ['ant', 5] ] – If we read string 'cat', search and update [ ['dog', 2], ['cat', 2], ['bug', 4], ['ant', 5] ] – If we read string 'frog', search and update [ ['dog', 2], ['cat', 2], ['bug', 4], ['ant', 5], ['frog', 1] ] compsci 101 spring 2017 26
See Different. Timings. py def linear(words): data = [] for w in words: found = False N new words? for elt in data: if elt[0] == w: elt[1] += 1 found = True break if not found: data. append([w, 1]) return data compsci 101 spring 2017 27
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Anderson Applegate Bethune Brooks Carter Douglas Edwards Franklin Griffin Holhouser Jefferson Klatchy Morgan Munson Narten Oliver Parker Rivers Roberts Stevenson Thomas Wilson Woodrow Yarbrow Binary Search Find Narten FOUND! How many times divide in half? log 2(N) for N element list compsci 101 spring 2017 28
Binary search through list o' lists • Maintain list of [string, count] pairs in order [ [‘ant', 4], [‘frog', 2] ] – If we read string 'cat', search and update [ [‘ant', 4], [‘cat’, 1], [‘frog', 2] ] – If we read string ‘dog‘ twice, search and update [ [‘ant', 4], [‘cat’, 1], [‘dog’, 1], [‘frog', 2] ] [ [‘ant', 4], [‘cat’, 1], [‘dog’, 2], [‘frog', 2]29 ] compsci 101 spring 2017
See Different. Timings. py bit. ly/101 s 17 -0330 -4 def binary(words): data = [] for w in words: elt = [w, 1] index = bisect_left(data, elt) if index == len(data): data. append(elt) elif data[index][0] != w: data. insert(index, elt) else: data[index][1] += 1 return data compsci 101 spring 2017 30
Search via Dictionary • In linear search we looked through all pairs • In binary search we looked at log pairs – But have to shift lots if new element!! • In dictionary search we look at one pair – Compare: one billion, 30, 1, for example – Note that 210 = 1024, 220 = million, 230=billion • Dictionary converts key to number, finds it – Need far more locations than keys – Lots of details to get 101 good performance compsci spring 2017 31
See Diifferent. Timings. py def dictionary(words): d = {} for w in words: if w not in d: d[w] = 1 else: d[w] += 1 return [[w, d[w]] for w in d] compsci 101 spring 2017 32
Running times @ 109 instructions/sec Dictionary List sorted N O(log N) O(N log N) List unordered O(N 2) 102 0. 00001 103 0. 0000001 0. 001 106 0. 001 0. 02 16. 7 min 109 0. 0 1. 0 29. 9 31. 7 years 16. 7 min 11. 07 hr 31. 7 million years 1012 9. 9 secs This is a real focus in Compsci 201 linear is N 2, binary search is N log N, dictionary N compsci 101 spring 2017 33
Running times @ 109 instructions/sec Dictionary List sorted N O(log N) O(N log N) List unordered O(N 2) 102 0. 00001 103 0. 0000001 0. 001 106 0. 001 0. 02 16. 7 min 109 0. 0 1. 0 29. 9 31. 7 years 16. 7 min 11. 07 hr 31. 7 million years 1012 9. 9 secs This is a real focus in Compsci 201 linear is N 2, binary search is N log N, dictionary N compsci 101 spring 2017 34
Running times @ 109 instructions/sec Dictionary List sorted N O(log N) O(N log N) List unordered O(N 2) 102 0. 00001 103 0. 0000001 0. 001 106 0. 001 0. 02 16. 7 min 109 0. 0 1. 0 29. 9 31. 7 years 16. 7 min 11. 07 hr 31. 7 million years 1012 9. 9 secs This is a real focus in Compsci 201 linear is N 2, binary search is N log N, dictionary N compsci 101 spring 2017 35
Running times @ 109 instructions/sec Dictionary List sorted N O(log N) O(N log N) List unordered O(N 2) 102 0. 00001 103 0. 0000001 0. 001 106 0. 001 0. 02 16. 7 min 109 0. 0 1. 0 29. 9 31. 7 years 16. 7 min 11. 07 hr 31. 7 million years 1012 9. 9 secs This is a real focus in Compsci 201 linear is N 2, binary search is N log N, dictionary N compsci 101 spring 2017 36
Running times @ 109 instructions/sec Dictionary List sorted N O(log N) O(N log N) List unordered O(N 2) 102 0. 00001 103 0. 0000001 0. 001 106 0. 001 0. 02 16. 7 min 109 0. 0 1. 0 29. 9 31. 7 years 16. 7 min 11. 07 hr 31. 7 million years 1012 9. 9 secs This is a real focus in Compsci 201 linear is N 2, binary search is N log N, dictionary N compsci 101 spring 2017 37
What's the best and worst case? Bit. ly/101 s 17 -0330 -5 • If every word is the same …. – Does linear differ from dictionary? Why? • If every word is different in alphabetical … – Does binary differ from linear? Why? • When would dictionary be bad? compsci 101 spring 2017 38
- Ap cs recursion
- Eecs 110
- Comp sci 1102
- Comp sci 1027
- Zjhz
- Poland national anthem lyrics
- Comp 101 unc
- What is your favorite subject answer
- Think central k5
- Introduction to computer science midterm exam
- Introduction to computer science midterm exam test
- Introduction to computer science quiz
- Python programming an introduction to computer science
- Fast desktop for architecture software
- Computer hardware 101
- Computer networking 101
- #รบสต
- Computer 101
- Umass poli sci
- Sci technology work from home
- Sci auditoria
- Spi vs sci
- Scigateway
- Sci-borg
- Math sci
- Cogsci c131
- Sci-fi conventions examples
- Guerilla open access
- Sci communication
- Zakladatelia sci fi
- Sci first for hunters
- Panss test
- Una pista da sci lunga 7 km ha tre gradi di difficoltà
- For offical use only
- Www.scopus.com author search
- Sci prefixes
- Characteristics science fiction
- Nome sovrabbondante
- Sci elo