Announcements No Labs / Recitation this week On Friday we will talk about Project 3 Release late afternoon / evening tomorrow Cryptography.

Slides:



Advertisements
Similar presentations
ThinkPython Ch. 10 CS104 Students o CS104 n Prof. Norman.
Advertisements

RAPTOR Syntax and Semantics By Lt Col Schorsch
Computer Science 101 Data Encryption And Computer Networks.
Programming with Alice Computing Institute for K-12 Teachers Summer 2011 Workshop.
Announcements Midterm next week! No class next Friday Review this Friday.
Python Magic Select a Lesson: Why Learn to Code? Basic Python Syntax
Week 6 - Programming I So far, we’ve looked at simple programming via “scripts” = programs of sequentially evaluated commands Today, extend features to:
Complexity (Running Time)
Python Control of Flow.
Java Unit 9: Arrays Declaring and Processing Arrays.
Python quick start guide
JS Arrays, Functions, Events Week 5 INFM 603. Agenda Arrays Functions Event-Driven Programming.
Cryptography Programming Lab
Data Structures More List Methods Our first encoding Matrix.
MATH 224 – Discrete Mathematics
Announcements Project 2 Available Tomorrow (we will send mail) Will be due 11:59PM October 9 th (Sunday) Week 6 ( I will be traveling this week) Review.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
Announcements All groups have been assigned Homework: By this evening everyone in your group and set up a meeting time to discuss project 4 Project.
Lecture 18 Tree Traversal CSCI – 1900 Mathematics for Computer Science Fall 2014 Bill Pine.
Section 2.4. Section Summary Sequences. Examples: Geometric Progression, Arithmetic Progression Recurrence Relations Example: Fibonacci Sequence Summations.
Nonvisual Arrays and Recursion by Chris Brown under Prof. Susan Rodger Duke University June 2012.
Section 10.1 Introduction to Trees These class notes are based on material from our textbook, Discrete Mathematics and Its Applications, 6 th ed., by Kenneth.
1 CS 177 Week 16 Recitation Recursion. 2 Objective To understand and be able to program recursively by breaking down a problem into sub problems and joining.
Topics: Sequence Sequences Index into a sequence [] notation Slicing and other operations.
Fall Week 4 CSCI-141 Scott C. Johnson.  Computers can process text as well as numbers ◦ Example: a news agency might want to find all the articles.
CS 103 Discrete Structures Lecture 10 Basic Structures: Sets (1)
Announcements Additional office hours tomorrow: 3-6pm in HAAS 142 Midterm Bring a #2 pencil (test given via scantron sheet) Photo ID No Labs or Recitation.
A Balanced Introduction to Computer Science, 3/E David Reed, Creighton University ©2011 Pearson Prentice Hall ISBN Chapter 15 JavaScript.
Numerical Representation Intro to Computer Science CS1510, Section 2 Dr. Sarah Diesburg 1.
Built-in Data Structures in Python An Introduction.
Computing Science 1P Large Group Tutorial: Lab Exam & Class Test Simon Gay Department of Computing Science University of Glasgow 2006/07.
OCR Computing GCSE © Hodder Education 2013 Slide 1 OCR GCSE Computing Python programming 8: Fun with strings.
More about Strings. String Formatting  So far we have used comma separators to print messages  This is fine until our messages become quite complex:
COSC 2007 Data Structures II Chapter 13 Advanced Implementation of Tables IV.
Introduction to Strings Intro to Computer Science CS1510, Section 2 Dr. Sarah Diesburg 1.
Announcements: Project 5 Everything we have been learning thus far will enable us to solve interesting problems Project 5 will focus on applying the skills.
CPSC 252 Hashing Page 1 Hashing We have already seen that we can search for a key item in an array using either linear or binary search. It would be better.
Python Mini-Course University of Oklahoma Department of Psychology Day 3 – Lesson 11 Using strings and sequences 5/02/09 Python Mini-Course: Day 3 – Lesson.
Midterm Review Important control structures Functions Loops Conditionals Important things to review Binary Boolean operators (and, or, not) Libraries (import.
Trees Ellen Walker CPSC 201 Data Structures Hiram College.
Example: Expressions Python Programming, 2/e 1 [+, [*, 3, 5], [*, 2, [-, 6, 1]]]
The Accumulator Pattern Summing: Add up (“accumulate”), e.g. 1 2 plus 2 2 plus 3 2 plus … plus Variation: Form a product (instead of sum), e.g.
CompSci 102 Discrete Math for Computer Science March 13, 2012 Prof. Rodger Slides modified from Rosen.
Searching CSE 103 Lecture 20 Wednesday, October 16, 2002 prepared by Doug Hogan.
CS 177 Week 9 Recitation Slides 1 Matrix Encoding Matrix Multiplication Trees as Lists Columnar Transposition 3/1/2016.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
Introduction to Arrays. Learning Objectives By the end of this lecture, you should be able to: – Understand what an array is – Know how to create an array.
OCR Computing GCSE © Hodder Education 2013 Slide 1 OCR GCSE Computing Python programming 3: Built-in functions.
1 CS Review, iClicker -Questions Week 15. ANY QUESTIONS? 2.
MA/CSSE 473 Day 05 More induction Factors and Primes Recursive division algorithm.
1 CS Review, iClicker -Questions Week 15. Announcements 2.
Python Fundamentals: Complex Data Structures Eric Shook Department of Geography Kent State University.
Data Structures So far, we have seen native data structures: Simple values: int, float, Boolean Sequences: Range, string, list Tuple, dictionary (chapter.
CMSC201 Computer Science I for Majors Lecture 05 – Comparison Operators and Boolean (Logical) Operators Prof. Katherine Gibson Prof. Jeremy.
CMSC201 Computer Science I for Majors Lecture 05 – Comparison Operators and Boolean (Logical) Operators Prof. Katherine Gibson Based on slides by Shawn.
MA/CSSE 473 Day 05 Factors and Primes Recursive division algorithm.
CMPT 120 Topic: Python strings.
Bryan Burlingame 03 October 2018
CMSC201 Computer Science I for Majors Lecture 12 – Tuples
Advanced Algorithms Analysis and Design
Fundamentals of Data Representation
Digital Encodings.
Trees Addenda.
Fundamentals of Python: First Programs
15-110: Principles of Computing
Introduction to Computer Science
Huffman Coding Greedy Algorithm
CMPT 120 Lecture 10 – Unit 2 – Cryptography and Encryption –
CMPT 120 Topic: Python strings.
Presentation transcript:

Announcements No Labs / Recitation this week On Friday we will talk about Project 3 Release late afternoon / evening tomorrow Cryptography

Midterm Curve 0-35 D C C C B B B A A

Data Structures More List Methods Our first encoding Matrix

CQ:Are these programs equivalent? b = [‘h’,’e’,’l’,’l’,’o’] b.insert(len(b), “w”) print(b) b = [‘h’,’e’,’l’,’l’,’o’] b.append(“w”) print(b) 21 A: yes B: no

Advanced List Operations L = [0, 1, 2, 0] L.reverse() print(L) will print: [0, 2, 1, 0] L.remove(0) print(L) will print: [2, 1, 0] L.remove(0) print(L) will print: [2, 1] print (L.index(2)) will print 0

Why are Lists useful? They provide a mechanism for creating a collection of items def doubleList(b): i = 0 while i < len(b): b[i] = 2 * b[i] i = i +1 return (b) print(doubleList([1,2,3]))

Using Lists to Create Our Own Encodings Python provides a number of encodings for us: Binary, ASCII, Unicode, RGB, Pictures etc. We know the basic building blocks, but we are still missing something … We need to be able to create our own encodings What if I want to write a program that operates on proteins?

Under the hood: what is a matrix? A matrix is not “pre defined” in python We “construct” a way to encode a matrix through the use of lists We will see how to do so using a single list (not ideal) We will see how to do so using a list of lists Two different ways Row by Row Column by Column ()

Lists Suppose we wanted to extract the value 3 The first set of [] get the array in position 1 of y. The second [] is selecting the element in position 2 of that array. This is equiv. to: y = [“ABCD”, [1,2,3], ”CD”, ”D”] y[1][2] z = y[1] z[2]

Lets make it more concrete! Lets revisit encoding a matrix Lets try something simple: A = [1, -1, 0, 2] B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6]

Does this work? We lose a bit of information in this encoding Which numbers correspond to which row We can explicitly keep track of rows through a row length variable B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6] rowLength = 3 B[rowLength*y +x]

Lets convince ourselves x = 0 y = 0 B[3*0 + 0] B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6] rowLength = 3 B[rowLength*y +x] x = 1 y = 1 B[3*1 + 1] x = 2 y = 1 B[3*1 + 2]

Can we encode it another way? We can encode column by column, but we lose some information again Which numbers correspond to which column We can explicitly keep track of columns through a column length variable B = [1, 0.5, -1, 0, 3, -3, 0, 4, 6] columnLength = 3 B[columnLength*x + y]

Lets convince ourselves x = 0 y = 0 B[3*0 + 0] x = 1 y = 1 B[3*1 + 1] x = 2 y = 1 B[3*2 + 1] B = [1, 0.5, -1, 0, 3, -3, 0, 4, 6] columnLength = 3 B[columnLength*x + y]

Lists of Lists Recall that when we had a string in our list B = [“ABCD”, 0, 1, 3] We could utilize the bracket syntax multiple times print B[0][1] would print B Lists can store other Lists B = [[0, 1, 3], 4, 5, 6]

Another way to encode a Matrix Lets take a look at our example matrix What about this? B= [[1, 0, 0], [0.5, 3, 4], [-1, -3, 6]]

Why is this important? We can now write code that more closely resembles mathematical notation i.e., we can use x and y to index into our matrix B = [[1, 0, 0], [0.5, 3, 4], [-1, -3, 6]] for x in range(3): for y in range(3): print (B[x][y])

…but first some more notation We can use the “*” to create a multi element sequence 6 * [0] results in a sequence of 6 0’s [0, 0, 0, 0, 0, 0] 3 * [0, 0] results in a sequence of 6 0’s [0, 0, 0, 0, 0, 0] 10 * [0, 1, 2] results in what?

What is going on under the hood? Lets leverage some algebraic properties 3 * [0, 0] is another way to write [0, 0] + [0, 0] + [0, 0] We know that “+” concatenates two sequences together

What about lists of lists? We have another syntax for creating lists [ X for i in range(y)] This creates a list with y elements of X Example: [ 0 for i in range(6)] ≡ [0]*6 [0, 0,0,0,0,0] Example: [[0, 0] for i in range(3)] ≡ [[0,0]]*3 [[0, 0], [0, 0], [0, 0]] What does this does: [2*[0] for i in range(3)]?

Lets put it all together m1 = [ [1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0] ] m2 = [ [2, 4, 6, 0], [1, 3, 5, 0], [0, -1, -2, 0] ] m3= [ 4*[0] for i in range(3) ] for x in range(3): for y in range(4): m3[x][y]= m1[x][y]+m2[x][y]

Data structures We have constructed our first data structure! As the name implies, we have given structure to the data The data corresponds to the elements in the matrix The structure is a list of lists The structure allows us to utilize math-like notation

Homework Read through the entire project description when it becomes available

Announcements: Project 3 Taking a look at cryptography Message -> Encrypted Message -> Message EncryptionDecryption

Shift Cipher How many possible elements do we have? Answer: 95 printable characters What happens if we shift something more than 95 positions? Answer: we need to loop around (shifting 99 is the same as shifting 4) What happens if we shift by a negative shift? Answer: we can modify a negative shift into a positive shift

Simple Example Consider if we had 4 options: “A” “B” “C” “D” Assume encoding for “A” is 0, “B” is 1, “C” is 2, and “D” is 3 Shifting “A” by 2 yields “C” (0+2) Shifting “B” by 2 yields “D” (1+2) Shifting “C” by 2 yields “A” (2+2) ? Shifting “D” by 2 yields “D” (3+2)?

Modular Arithmetic Modular arithmetic allows us to count “in circles” 0 mod 4 = 0 1 mod 4 = 1 2 mod 4 = 2 3 mod 4 = 3 4 mod 4 = 0 5 mod 4 = 1 6 mod 4 = 2 7 mod 4 = 3

Simple Example Consider if we had 4 options: “A” “B” “C” “D” Assume encoding for “A” is 0, “B” is 1, “C” is 2, and “D” is 3 Shifting “A” by 2 yields “C” (0+2) mod 4 = 2 Shifting “B” by 2 yields “D” (1+2) mod 4 = 3 Shifting “C” by 2 yields “A” (2+2) mod 4 = 0 Shifting “D” by 2 yields “B” (3+2) mod 4 = 1

Negative Shifts? Lets think about negative shifts … conceptually we just “go the other way” “D” shifted by -1 is “C” (3-1) mod 4 = 2 “C” shifted by -1 is “B” (2-1) mod 4 = 1 Observe that since we are effectively moving in a circle, a negative shift can be expressed as a positive shift “D” shifted by 3 is “C” (3 + 3) mod 4 = 2 “C” shifted by 3 is “B” (2 + 3) mod 4 = 1

What about large negative shifts? Observe that shifting -10 is equivalent to shifting -2 Why? We shift 2 times around our “circle” of letters and then need to shift -2 additional letters Notice that both shifting -10 and shifting -2 are equivalent to shifting mod 4 = 2 -2 mod 4 = 2 Notice that we can compute a positive shift from a negative shift by: shift modulo the total number of elements

Clicker Question: did we encode the same matrix in both programs? [[1, 2], [3, 4]][[1, 3], [2, 4]] 21 A: yes B: no C: maybe

Lets explore why it depends [[1, 3], [2, 4]] 2 [[1, 2], [3, 4]] 1 (()) Both lists of lists can either be a row by row or a column by column encoding

Let us encode something else using lists!

We call this structure a tree Root

How might we encode such a structure? What structures do we know of in python? Strings, Ranges, Lists We know that lists allow us to encode complex structures via sub lists We used sub list to encode either a row or a column in the matrix We used an ‘outer’ list of rows or columns as a matrix

Can we use the same strategy? How might we encode a simple tree? Root Leaf1Leaf2Leaf3 Tree = [‘Leaf1’, ‘Leaf2’, ‘Leaf3’]

Trees can be more complex Root Leaf1Leaf2 Leaf3Leaf4Leaf5 Tree = [‘Leaf1’, ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, ‘Leaf5’]]

Trees can be more complex Root Leaf1 Leaf2 Leaf3Leaf4Leaf5 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, ‘Leaf5’]] Leaf0

Trees can be more complex Root Leaf1 Leaf2 Leaf3Leaf4 Leaf6 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Leaf0 Leaf5

What is the intuition Each sub list encodes the ‘branches’ of the tree We can think of each sub list as a ‘sub tree’ We can use indexes (the bracket notation []) to select out elements or ‘sub trees’

How can we select out the leaves? Root Leaf1 Tree[0] Leaf2 Tree[1] Leaf3 Tree[2] Tree = [‘Leaf1’, ‘Leaf2’, ‘Leaf3’]

Indexes provide us a way to “traverse” the tree Root Leaf1 Leaf2 Leaf3Leaf4 Leaf6 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Leaf0 Leaf

Indexes provide us a way to “traverse” the tree Root Leaf1 Leaf2 Leaf3Leaf4 Leaf6 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Tree[2] Leaf0 Leaf

Indexes provide us a way to “traverse” the tree Root Leaf1 Leaf2 Leaf3Leaf4 Leaf6 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Tree[2][2] Leaf0 Leaf

Indexes provide us a way to “traverse” the tree Root Leaf1 Leaf2 Leaf3Leaf4 Leaf6 Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Tree[2][2][1] Leaf0 Leaf

CQ: How do we select ‘Leaf4’ from the Tree? Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] A: Tree[2][1] B: Tree[3][2] C: Tree[1][2]

Operations on Trees Trees, since they are encoded via lists support the same operations lists support We can “+” two trees We can embedded two trees within a list This creates a larger tree with each of the smaller trees as sub trees Example: Tree1 = [‘Leaf1’, ‘Leaf2’] Tree2 = [‘Leaf3’, ‘Leaf4’] Tree = [Tree1, Tree2]

“+” two trees Leaf1 Leaf2 Leaf3Leaf4Leaf0 Leaf6Leaf5 Tree1 = [[‘Leaf0’, ‘Leaf1’]] Tree2 = [‘Leaf2’] Tree3 = [[‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]

“+” two trees Leaf1 Leaf2 Leaf3Leaf4Leaf0 Leaf6Leaf5 Tree1 = [[‘Leaf0’, ‘Leaf1’]] Tree2 = [‘Leaf2’] Tree4 = Tree1+Tree2 [[‘Leaf0’, ‘Leaf1’], ‘Leaf2’]

“+” two trees Leaf1 Leaf2 Leaf3Leaf4Leaf0 Leaf6Leaf5 Tree4 = [[‘Leaf0’, ‘Leaf1’], ‘Leaf2’] Tree3 = [[‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]] Tree = Tree4+Tree3

Why are trees important? They are a fundamental structure in computer science They enable us to search very quickly We will revisit trees later in the course What have we covered so far: Given a tree diagram we can write a list of lists Given a complex list we can select elements

Homework Work on Project 3 Read Sections 11.1, 11.2, 11.3 (15 pages)