36
Review Algorithms Sorting Selection Sort Bubble Sort Searching Linear Search Binary Search Worst Case Running Time

Review - Computer Science | Bryn Mawr College · Review –Algorithms –Sorting •Selection Sort •Bubble Sort –Searching •Linear Search •Binary Search –Worst Case Running

  • Upload
    lenga

  • View
    220

  • Download
    1

Embed Size (px)

Citation preview

Review – Algorithms

– Sorting • Selection Sort

• Bubble Sort

– Searching • Linear Search

• Binary Search

– Worst Case Running Time

0 1 0 0 0 0 0 1

0+26+0+0+0+0+0+20

64 + 1

65

The simplest schoolboy is now familiar with truths for which Archimedes would have sacrificed his life.

Char Dec Char Dec Char Dec Char Dec Char Dec Char Dec Char Dec

(nul) 0 (dc4) 20 ( 40 < 60 P 80 d 100 x 120

(soh) 1 (nak) 21 ) 41 = 61 Q 81 e 101 y 121

(stx) 2 (syn) 22 * 42 > 62 R 82 f 102 z 122

(etx) 3 (etb) 23 + 43 ? 63 S 83 g 103 { 123

(eot) 4 (can) 24 , 44 @ 64 T 84 h 104 | 124

(enq) 5 (em) 25 - 45 A 65 U 85 i 105 } 125

(ack) 6 (sub) 26 . 46 B 66 V 86 j 106 ~ 126

(bel) 7 (esc) 27 / 47 C 67 W 87 k 107 (del) 127

(bs) 8 (fs) 28 0 48 D 68 X 88 l 108

(ht) 9 (gs) 29 1 49 E 69 Y 89 m 109

(nl) 10 (rs) 30 2 50 F 70 Z 90 n 110

(vt) 11 (us) 31 3 51 G 71 [ 91 o 111

(np) 12 (sp) 32 4 52 H 72 \ 92 p 112

(cr) 13 ! 33 5 53 I 73 ] 93 q 113

(so) 14 " 34 6 54 J 74 ^ 94 r 114

(si) 15 # 35 7 55 K 75 _ 95 s 115

(dle) 16 $ 36 8 56 L 76 ` 96 t 116

(dc1) 17 % 37 9 57 M 77 a 97 u 117

(dc2) 18 & 38 : 58 N 78 b 98 v 118

(dc3) 19 ' 39 ; 59 O 79 c 99 w 119

ASCII - American Standard Code for Information Interchange

Files – A sequence of bytes

– Usually stored in some durable form

– Have a beginning, end, and length (size)

– Have an encoding – how to interpret data US-ASCII (7-bits per glyph)

ISO-8859-1 (8-bits per glyph)

Unicode (Combines several encodings)

UTF-8 (variable width per glyph, >1,100,000)

– Compression Lossless vs. Lossy (ex. PNG vs. JPEG)

Run-length Encoding (253 white pixels, 29 reds, …)

Lempel–Ziv (dictionary coders, used by zip)

Unicode Character 'PILE OF POO'

(U+1F4A9)

Files

– Proprietary encodings and compression means file data may not directly encode what you read

Files

– Proprietary encodings and compression means file data may not directly encode what you read

“Simple Text Files”

– All file data translates to readable content

• no formatting, no compression

• standard, non-proprietary encoding

• each data item encodes a glyph

Opening/Closing Files – To programmatically access data in a file, it must first

be opened

– When finished, it must be closed

f = open( path, "r" )

f.close()

Method of file access: read (“r”), write (“w”) or append (“a”)

Name of file to open

Variable to hold the newly created

file object

File Reading Methods

(Executed between open() and f.close() )

• f.read()

– Read all data until end of file (EOF) is reached and return as a string object

• f.readline()

– Read one entire line from the file (keeps the trailing newline character) and return as a string object

• f.readlines()

– Read until EOF using readline() and return a list containing the lines thus read

End-of-line (EOL) Markers

• The end-of-line in a file is marked by special non-glyph characters

• Varies by Operating System

– Unix and Linux (and Mac OS X) • Use newline: \n

– DOS and Windows • Use return + newline: \r\n

– Old Mac OSs • Use return: \r \ is used as a special

“escape” character

End-of-line (EOL) Markers

Windows EOL: Carriage Return (\r) Linefeed (\n)

• Python automatically translates Windows EOLs when reading and writing files on Windows platforms

End-of-line (EOL) Markers

WHO Tuberculosis Data

http://www.who.int/tb/country/data/download/en/index.html

reduced.csv

In Excel: Select File, Save As, CSV (Comma delimited) (*.cvs)

f = open( path, "r" )

all = f.read() # Read entire file

line = f.readline() # Read one line

lines = f.readlines() # Read a list of lines

f.close()

File Reading

Reading Files – All lines at once

f = open( "reduced.csv", "r" )

lines = f.readlines()

f.close()

for line in lines:

print( line )

read1.py

Reading Files with a for-loop

f = open( "reduced.csv", "r" )

for line in f:

print( line )

f.close()

read2.py

Why the extra blank line?

Reading Files with a for-loop

f = open( "reduced.csv", "r" )

longest = ""

for line in f:

if len(line) > len(longest):

longest = line

f.close()

print( longest )

• Find the longest line in a file

longest.py

Splitting/Joining Strings

# A single line read from a file

line = "United States of America,1996,274066816,8.9"

# Split string into a list if substrings

# Can use any delimiter

items = line.split(",")

print( items )

>>> ['United States of America', '1996', '274066816', '8.9']

# Join a list of strings into a single combined string

joined = ",".join(items)

print( joined )

>>> United States of America,1996,274066816,8.9

Converting Strings to Numbers

syear = '1996'

year = int(syear)

print( type( year ) )

>>> <type 'int'>

stb100k = '8.9'

tb100k = float(stb100k)

print( type( tb100k ) )

>>> <type 'float'>

Reading Files and Converting to Usable Format

1. Read lines from a file, one at a time

2. Split lines on an appropriate separator character into a list of items (list of strings)

3. Convert individual list items into appropriate data types

4. Store converted data in lists or objects

Reading Files and Converting to Usable Format

# load.py

items = []

f = open( "reduced.csv", "r" ) # Open file

for line in f: # Loop over all lines in file

items = line.split(',') # Split items

country = items[0] # Convert to usable data types

year = int( items[1] )

pop = int( items[2] )

tb = float( items[3] ) * 100000

# Store data together in a dictionary

item = {'country':country, 'year':year, 'population':pop, 'tb':tb}

items.append( item ) # Add to master list

f.close() # Close file

Removing whitespace chars with strip()

s1 = " abc"

s2 = s1.strip()

print( s1 )

print( s2 )

>>> abc

>>> abc

Whitespace characters: • not associated with glyphs • Include: space, tab, newline, carriage return, … • " \t\n\r"

Whitespace can be removed from the ends of a string using the strip() string method

String Interpolation (Substitution)

• Format one string and insert it into another string • Uses ‘%’ notation • Substitution template on left, items on right

<template string> % items

• Template substitution specifiers:

%s : substitute a string %d : substitute an integer %5d : substitute an integer formatted with 5 places %3.2f : substitute a float, 3 places to the left of integer, : and 2 places to the right

String Interpolation >>> "Hello %s %s, you may have already won $%d" % ("Mr.", "Smith", 10000)

'Hello Mr. Smith, you may have already won $10000'

>>> 'This int, %5d, was placed in a field of width 5' % 7

'This int, 7, was placed in a field of width 5'

>>> 'This int, %10d, was placed in a field of witdh 10' % 10

'This int, 10, was placed in a field of witdh 10'

>>> 'This int, %10d, was placed in a field of width 10' % 7

'This int, 7, was placed in a field of width 10'

>>> 'This float, %10.5f, has width 10 and precision 5.' % 3.1415926

'This float, 3.14159, has width 10 and precision 5.'

>>> 'This float, %0.5f, has width 0 and precision 5.' % 3.1415926

'This float, 3.14159, has width 0 and precision 5.'

>>> 'Compare %f and %0.20f' % (3.14, 3.14)

'Compare 3.140000 and 3.14000000000000010000'

http://mcsp.wartburg.edu/zelle/python/ppics1/slides/Chapter04.ppt

String Interpolation (Substitution)

‘items’ can be a dictionary, and substitution specifiers can be dictionary keys in parentheses.

<template> % dictionary

msg = "The winner of %(award)s is %(name)s!"

dsub1 = {'award':'first place', 'name':'Fido'}

dsub2 = {'award':'second place', 'name':'Spot'}

print( msg % dsub1 )

print( msg % dsub2 )

>>> The winner of first place is Fido!

>>> The winner of second place is Spot!

See also madglib.py

File write methods

• f.write(str)

– Write a string to the file

– Note: Due to buffering, the string may not actually show up in the file until the f.flush() or f.close() method is called

• f.writelines(sequence)

– Write a sequence of strings to the file

– Note: Does not add line separators, but this can be done using the string join operator

Writing Files

# write1.py

f = open("greek.txt", "w")

f.write( "alpha" )

f.writelines( ["beta", "gamma", "delta"] )

f.close()

• Open for write "w" overwrites file. • Open for append "a" adds to what is already there.

Writing Files

# write2.py

f = open("greek2.txt", "w")

f.write( "alpha\n" )

f.writelines( ["beta\n", "gamma\n", "delta\n"] )

f.close()

• Write EOL characters by adding '\n'

Writing Files

# write3.py

import os

f = open("greek3.txt", "w")

f.write( "alpha\n" )

items = ["beta", "gamma", "delta"]

sitems = os.linesep.join( items )

f.write( sitems )

f.close()

• Use join method of os.linesep string to build file contents

The os module

• Provides generic operating system (OS) support and a standard, platform-independent OS interface

• Includes tools for environments, processes, files, shell commands, and much more

File and directory commands

• os.getcwd()

– Returns the name of the current working directory as a string

• os.chdir(path)

– Changes the current working directory for this process to path, a directory name string

• os.listdir(path)

– Returns a list of names of all the entries in the directory path

File and directory commands

The Calico Project, Version 2.1.1

python>>> import os

Ok

python>>> os.getcwd()

'C:\\CS110 Fall 2012\\section002\\Lectures\\25\\examples'

Ok

python>>> os.listdir( os.getcwd() )

['greek.txt', 'greek2.txt', 'greek3.txt', 'load.py',

'longest.py', 'path.py', 'read1.py', 'read2.py',

'reduced.csv', 'TB_burden_countries_2010.csv',

'TB_data_dictionary_2011-04-10.csv', 'write1.py',

'write2.py', 'write3.py']

Ok

Portability constants

• os.curdir

– String for the current directory

• os.pardir

– String for the parent directory

• os.sep

– String used to separate directories

• os.linesep

– String used to terminate lines

Portability constants The Calico Project, Version 2.1.1

python>>> import os

Ok

python>>> os.curdir

'.'

Ok

python>>> os.pardir

'..'

Ok

python>>> os.sep

'\\'

Ok

python>>> os.linesep

'\r\n'

Ok