0% found this document useful (0 votes)
15 views

04 Fundamentals

The document discusses fundamentals of data structures and algorithms including mathematical concepts like logarithms, exponents, and recursion. It covers powers of 2, binary and other number systems, properties of logarithms, arithmetic series, and provides examples of analyzing simple programs and calculating Fibonacci numbers recursively and iteratively. The key ideas are that logarithms describe exponential growth and can be used to analyze algorithm running times, while recursion risks repetitive calculations that iteration can avoid.

Uploaded by

Lộc
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views

04 Fundamentals

The document discusses fundamentals of data structures and algorithms including mathematical concepts like logarithms, exponents, and recursion. It covers powers of 2, binary and other number systems, properties of logarithms, arithmetic series, and provides examples of analyzing simple programs and calculating Fibonacci numbers recursively and iteratively. The key ideas are that logarithms describe exponential growth and can be used to analyze algorithm running times, while recursion risks repetitive calculations that iteration can avoid.

Uploaded by

Lộc
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 25

Fundamentals

Data Structures and Algorithm Analysis in C, by Mark Allen Weiss, 2nd


edition, 1997, Addison-Wesley, ISBN 0-201-49840-5
Danang University of Science and Technology

Dang Thien Binh


[email protected]
Readings and References
 Reading
 Chapters 1-2, Data Structures and Algorithm Analysis in C, Weiss

 Other References

Data Structures 2
Mathematical Background

 Today, we will review:


 Logs and exponents
 Series
 Recursion
 Motivation for Algorithm Analysis

Data Structures 3
Powers of 2

 Many of the numbers we use will be powers of 2


 Binary numbers (base 2) are easily represented in digital
computers
 each "bit" is a 0 or a 1
 20=1, 21=2, 22=4, 23=8, 24=16, 28=256, …
 an n-bit wide field can hold 2n positive integers:

 0  k  2n-1

Data Structures 4
Unsigned binary numbers

 Each bit position represents a power of 2


 For unsigned numbers in a fixed width field
 the minimum value is 0
 the maximum value is 2n-1, where n is the number of bits in
the field
 Fixed field widths determine many limits
 5 bits = 32 possible values (25 = 32)
 10 bits = 1024 possible values (210 = 1024)

Data Structures 5
Binary, Hex, and Decimal
28=256

27=128

26=64

25=32

24=16

21=2
22=4
23=8

20=1
Hex16 Decimal10
1 1 0x3 3
1 0 0 1 0x9 9
1 0 1 0 0xA 10
1 1 1 1 0xF 15
1 0 0 0 0 0x10 16
1 1 1 1 1 0x1F 31
1 1 1 1 1 1 1 0x7F 127
1 1 1 1 1 1 1 1 0xFF 255

Data Structures 6
Logs and exponents

 Definition: log2 x = y means x = 2y


 the log of x, base 2, is the value y that gives x = 2y
 8 = 23, so log28 = 3
 65536= 216, so log265536 = 16

 Notice that log2x tells you how many bits are needed to
hold x values
 8 bits holds 256 numbers: 0 to 28-1 = 0 to 255
 log2256 = 8

Data Structures 7
x = 0:.1:4
y = 2.^x
plot(x,y,'r')
hold on
plot(y,x,'g')
plot(y,y,'b')

2x and log2x
Data Structures
x = 0:10
y = 2.^x
plot(x,y,'r')
hold on
plot(y,x,'g')
plot(y,y,'b')

2x and log2x
Data Structures
Example: log2x and tree depth

 7 items in a binary tree, 3 = log27+1 levels

2 6

1 3 5 7

Data Structures 10
Properties of logs (of the mathematical
kind)

 We will assume logs to base 2 unless specified


otherwise
 log AB = log A + log B
 A=2log2A and B=2log2B
 AB = 2log2A • 2log2B = 2log2A+log2B
 so log2AB = log2A + log2B

 note: log AB  log A•log B

Data Structures 11
Other log properties
 log A/B = log A – log B
 log (AB) = B log A
 log log X < log X < X for all X > 0
 log log X = Y means
 log X grows slower than X
2Y
 2 X
called a “sub-linear” function

Data Structures 12
A log is a log is a log

 Any base x log is equivalent to base 2 log within a con-


stant factor
log x B  log x B
x log x B  B
B  2log 2 B
(2log 2 x ) log x B  2log 2 B
x  2log 2 x
2log 2 x log x B  2log 2 B
log 2 x log x B  log 2 B
log 2 B
log x B 
log 2 x

Data Structures 13
Arithmetic Series
N

 S (N )  1 2    N   i
i 1

 The sum is
 S(1) = 1
 S(2) = 1+2 = 3
 S(3) = 1+2+3 = 6
N
N ( N  1)
 
i 1
i
2
Why is this formula useful?

Data Structures 14
Quicky Algorithm Analysis

 Consider the following program segment:


for (i = 1; i <= N; i++)
for (j = 1; j <= i; j++)
printf(“Hello\n”);
 How many times is “printf” executed?
 Or, How many Hello’s will you see?

Data Structures 15
What is actually being executed?
 The program segment being analyzed:
for (i = 1; i <= N; i++)
for (j = 1; j <= i; j++)
printf(“Hello\n”);
 Inner loop executes “printf” i times in the ith iteration
 j goes from 1 to i
 There are N iterations in the outer loop
 i goes from 1 to N

Data Structures 16
Lots of hellos

 Total number of times “printf” is executed =


N
N ( N  1)
1  2  3  ...   i 
2
 Congratulations
i 1
- You’ve just analyzed your first pro-
gram!
 Running time of the program is proportional to N(N+1)/2 for
all N
 Proportional to N2

Data Structures 17
Recursion

 Classic (bad) example: Fibonacci numbers Fn

1, 1, 2, 3, 5, 8, 13, 21, 34, …

 First two are defined to be 1


 Rest are sum of preceding two
Leonardo Pisano
 F =F +F (n > 1) Fibonacci (1170-1250)
n n-1 n-2

Data Structures 18
Recursive Procedure for Fibonacci
Numbers
int fib(int i) {
if (i < 0) return 0;
if (i == 0 || i == 1)
return 1;
else
return fib(i-1)+fib(i-2);
}
 Easy to write: looks like the definition of Fn
 But, can you spot the big problem?

Data Structures 19
Recursive Calls of Fibonacci Procedure

 Re-computes fib(N-i) multiple times!

Data Structures 20
Iterative Procedure for Fibonacci Num-
bers

int fib_iter(int i) {
int fib0 = 1, fib1 = 1, fibj = 1;
if (i < 0) return 0;
for (int j = 2; j <= i; j++) {
fibj = fib0 + fib1;
fib0 = fib1;
fib1 = fibj;
}
return fibj;
}
 More variables and more bookkeeping but avoids
repetitive calculations and saves time.

Data Structures 21
Recursion Summary

 Recursion may simplify programming, but beware


of generating large numbers of calls
 Function calls can be expensive in terms of time and
space
 Be sure to get the base case(s) correct!
 Each step must get you closer to the base case

Data Structures 22
Motivation for Algorithm Analysis

 Suppose you are


given two algos A and
B for solving a prob- TA

Run Time
lem
 The running times
TA(N) and TB(N) of A
and B as a function of TB
input size N are given
Input Size N

Which is better?

Data Structures 23
More Motivation
 For large N, the running time of A and B is:

Now which
algorithm would
Run Time

TA(N) = 50N
you choose?

TB(N) = N2

Input Size N

Data Structures 24
Asymptotic Behavior

 The “asymptotic” performance as N  , regard-


less of what happens for small input sizes N, is
generally most important
 Performance for small input sizes may matter in
practice, if you are sure that small N will be com-
mon forever
 We will compare algorithms based on how they
scale for large values of N

Data Structures 25

You might also like