0% found this document useful (0 votes)
4 views24 pages

Python Lecture 13-Dictionary

The document discusses algorithms for finding prime numbers using the Sieve of Eratosthenes, which is efficient with a time complexity of O(n log log n) and requires an array of size n. It also covers Fibonacci numbers, highlighting the inefficiencies of naive recursion and presenting a modified approach using memorization to achieve a complexity of O(n). Additionally, it explains the use of dictionaries for associating keys with values, illustrating their advantages over lists for data retrieval and manipulation.

Uploaded by

Abhishek Goutam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views24 pages

Python Lecture 13-Dictionary

The document discusses algorithms for finding prime numbers using the Sieve of Eratosthenes, which is efficient with a time complexity of O(n log log n) and requires an array of size n. It also covers Fibonacci numbers, highlighting the inefficiencies of naive recursion and presenting a modified approach using memorization to achieve a complexity of O(n). Additionally, it explains the use of dictionaries for associating keys with values, illustrating their advantages over lists for data retrieval and manipulation.

Uploaded by

Abhishek Goutam
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

A: Use of arrays (space) to improve

efficiency of algorithms

B: Dictionary
Prime Numbers:

• Given n find all prime numbers from 2 to n.


• Generalises earlier strategy
• One approach is to do test_prime(n) for all
numbers upto n.
– Not efficient
Prime Numbers:
Seive of Eratosthenes
• Avoid multiples of ALL smaller primes –
cross (mark) them.
• Algorithm:
– For 2 <= x <= n
• ...
Algorithm
Seive of Eratosthenes
Algorithm
Seive of Eratosthenes

• Array of [2..n]
• Initialise:
– All numbers UNCROSSED
– x=2
• WHILE (x <= n)
– Proceed to next uncrossed number x. This is a
PRIME
– CROSS all multiples of x
Algorithm
Seive of Eratosthenes

def sieve(n):
save = [True] * (n+1)
save[0]=save[1]=False
i=2
n = int(input('Give n:'))
while (i*i <= n):
primes=sieve(n)
if (save[i]):
for i in range(n+1):
k = i*i
if primes[i]:
while (k<=n):
print(i)
save[k] = False
k += i
i += 1 driver program
return save

function sieve
Algorithm
Seive of Eratosthenes

• Time complexity

– O(nloglogn) – proof is not in the scope here


• Extra space
– Need array of size ~ n
• Can reduce extra space – segmented
sieve
Fibonacci Numbers (Revisit)

0 n=1
fib (n) = 1 n=2
fib (n-1) + fib (n-2) n > 2

Recursive Algorithm

Courtesy Prof PR Panda CSE Department IIT Dehi


Fibonacci Numbers (Revisit)

fib (6)

fib (5) fib (4)

fib (4) fib (3) fib (3) fib (2)

fib (3) fib (2) fib (2) fib (1) fib (2) fib (1)

fib (2) fib (1)

Courtesy Prof PR Panda CSE Department IIT Dehi


Fibonacci Numbers (Revisit)

fib (6)

fib (5) fib (4)

fib (4) fib (3) fib (3) fib (2)

fib (3) fib (2) fib (2) fib (1) fib (2) fib (1)

fib (2) fib (1)

Complexity O(2n)
Courtesy Prof PR Panda CSE Department IIT Dehi
Fibonacci Numbers (Modified)

• Based on memorization
• Save result when first computed
• Implement using an array (list)
Fibonacci Numbers (Modified)
Fibonacci Numbers (Modified)

Complexity O(n)
Fibonacci Numbers (Modified)

• fib(34): 3524578
– For the naïve recursive program the number
of calls is 11405773
– For the modified program the number of calls
is 65
Dictionary
Motivation
• Consider that one wants to associate
name (id) with grades of students.
• Can obtain through two separate lists
– names: [‘Mukesh’, ‘Sham’, ‘Arpita’, ‘Neha’]
– grades:[‘A-’,’B’,’A’,’C’]
• Separate list of same length for each item
• Associated information stored across lists
at same index
• Retrieval and manipulation is not easy
Motivation
• Consider that one wants to associate
name (id) with grades of students.
• Can obtain through two separate lists
– names: [‘Mukesh’, ‘Sham’, ‘Arpita’, ‘Neha’]
– grades:[‘A-’,’B’,’A’,’C’]
• Separate list of same length for each item
• Associated information stored across lists
at same index
• Retrieval and manipulation is not easy
Dictionary
• Natural data structure to store pairs of
data.
– key (custom index by label)
– value
Dictionary
• Lookup:
– similar to indexing into list
– looks up the key and returns the value
associated with the key
– if key is not found returns error

– print(grades[‘Sham’]) à B
– print(grades[‘Amit’]) à Error
Dictionary
• Other operations:
– add an entry:
• grades[‘Ankit’]=‘B-’
{'Mukesh': 'A-', 'Sham': 'B', 'Arpita': 'A', 'Neha': 'C', 'Ankit': 'B-'}

– test if key is in dictionary


• Mukesh in grades à returns True
• Suresh un grades à returns False
– delete an entry
• del(grades[‘Neha’])
Dictionary
• Other operations:
– update an entry:
• grades.update({‘Ankit’:‘B-’})
{'Mukesh': 'A-', 'Sham': 'B', 'Arpita': 'A', 'Neha': 'C', 'Ankit': 'B-'}
• grades.update({‘Neha’:‘B-’})
{'Mukesh': 'A-', 'Sham': 'B', 'Arpita': 'A', 'Neha': ‘B-', 'Ankit': 'B-'}
– get for getting the value for a key
• grades.get(‘Mukesh’) à returns A
– pop for removing a specific item
• grades.pop(‘Neha’)
Dictionary
• Other operations:
– grades.keys() gives the keys, the order may
not be guaranteed
dict_keys(['Mukesh', 'Sham', 'Arpita', 'Neha'])
– grades.values() gives the values, the order
may not be guaranteed
dict_values(['A-', 'B', 'A', 'C'])
– grades.items() gives the contents
dict_items([('Mukesh', 'A-'), ('Sham', 'B'), ('Arpita',
'A'), ('Neha', 'C')])
List vs Dictionary
List Dictionary
Ordered sequence of Matches keys to
elements values
Indices have an No order is
order guaranteed
Index is an integer Key can be any
immutable type
Dictionary is also known as associate array or hashmap in other
programming languages
Fibonacci Numbers (Modified)

Use of Dictionary Complexity O(n)

You might also like