SoftUni Team
Technical Trainers
Software University
http://softuni.bg
Data Structures,
Algorithms and Complexity
Analyzing Algorithm Complexity.
Asymptotic Notation
Table of Contents
1. Data Structures
 Linear Structures, Trees, Hash Tables, Others
2. Algorithms
 Sorting and Searching, Combinatorics,
Dynamic Programming, Graphs, Others
3. Complexity of Algorithms
 Time and Space Complexity
 Mean, Average and Worst Case
 Asymptotic Notation O(g)
2
Data Structures
Overview
4
 Examples of data structures:
 Person structure (first name + last name + age)
 Array of integers – int[]
 List of strings – List<string>
 Queue of people – Queue<Person>
What is a Data Structure?
“In computer science, a data structure is a particular
way of storing and organizing data in a computer so
that it can be used efficiently.” -- Wikipedia
5
Student Data Structure
struct Student {
string Name { get; set; }
short Age { get; set; } // Student age (< 128)
Gender Gender { get; set; }
int FacultyNumber { get; set; }
};
enum Gender
{
Male,
Female,
Other
}
Student
Name Maria Smith
Age 23
Gender Female
FacultyNumber SU2007333
6
Stack
data
data
data
data
data
data
data
top of the stack
7
Stack
class Stack<T>
{
// Pushes an elements at the top of the stack
void Push(T data);
// Extracts the element at the top of the stack
T Pop();
// Checks for empty stack
bool IsEmpty();
}
// The type T can be any data structure like
// int, string, DateTime, Student
8
Queue
data
data
data
data
data
data
data
Start of the queue: elements
are excluded from this position
End of the queue: new
elements are inserted here
9
Queue
class Queue<T>
{
// Appends an elements at the end of the queue
void Enqueue(T data);
// Extracts the element from the start of the queue
T Dequeue();
// Checks for empty queue
bool IsEmpty();
}
// The type T can be any data structure like
// int, string, DateTime, Student
10
Linked List
2
next
7
next
head
(list start)
4
next
5
next
null
11
Trees
17
15149
6 5 8
Project
Manager
Team
Leader
Designer
QA Team
Leader
Developer
1
Developer
2
Tester 1
Developer
3
Tester
2
12
Binary Tree
17
199
6 12 25
13
Graphs 7
19
21
14
1
12
31
4
11
G
J
F
D
A
E C H
GA
H N
K
14
Hash-Table
15
Hash-Table: Structure
h("Pesho") = 4
h("Kiro") = 2
h("Mimi") = 1
h("Ivan") = 2
h("Lili") = m-1
Ivan
null
null null
null Mimi Kiro null Pesho … Lili
0 1 2 3 4 … m-1
T
null
collision
Chaining the elements
in case of collision
16
 Data structures and algorithms are the foundation of computer
programming
 Algorithmic thinking, problem solving and data structures are
vital for software engineers
 C# developers should know when to use T[], LinkedList<T>,
List<T>, Stack<T>, Queue<T>, Dictionary<K, T>,
HashSet<T>, SortedDictionary<K, T> and SortedSet<T>
 Computational complexity is important for algorithm design and
efficient programming
Why Are Data Structures So Important?
 Primitive data types
 Numbers: int, float, double, decimal, …
 Text data: char, string, …
Simple structures
 A group of primitive fields stored together
 E.g. DateTime, Point, Rectangle, Color, …
 Collections
 A set / sequence of elements (of the same type)
 E.g. array, list, stack, queue, tree, hashtable, bag, …
Primitive Types and Collections
17
 An Abstract Data Type (ADT) is
 A data type together with the operations, whose properties are
specified independently of any particular implementation
 ADT is a set of definitions of operations
 Like the interfaces in C# / Java
 Defines what we can do with the structure
 ADT can have several different implementations
 Different implementations can have different efficiency, inner
logic and resource needs
Abstract Data Types (ADT)
18
 Linear structures
 Lists: fixed size and variable size sequences
 Stacks: LIFO (Last In First Out) structures
 Queues: FIFO (First In First Out) structures
 Trees and tree-like structures
 Binary, ordered search trees, balanced trees, etc.
 Dictionaries (maps, associative arrays)
 Hold pairs (key  value)
 Hash tables: use hash functions to search / insert
Basic Data Structures
19
20
 Sets, multi-sets and bags
 Set – collection of unique elements
 Bag – collection of non-unique elements
 Ordered sets and dictionaries
 Priority queues / heaps
 Special tree structures
 Suffix tree, interval tree, index tree, trie, rope, …
 Graphs
 Directed / undirected, weighted / unweighted,
connected / non-connected, cyclic / acyclic, …
Basic Data Structures (2)
Algorithms
Overview
22
 The term "algorithm" means "a sequence of steps"
 Derived from Muḥammad Al-Khwārizmī', a Persian mathematician
and astronomer
 He described an algorithm for solving quadratic equations in 825
What is an Algorithm?
“In mathematics and computer science, an algorithm is
a step-by-step procedure for calculations. An algorithm
is an effective method expressed as a finite list of well-
defined instructions for calculating a function.”
-- Wikipedia
23
 Algorithms are fundamental in programming
 Imperative (traditional, algorithmic) programming means to
describe in formal steps how to do something
 Algorithm == sequence of operations (steps)
 Can include branches (conditional blocks) and repeated logic (loops)
 Algorithmic thinking (mathematical thinking, logical thinking,
engineering thinking)
 Ability to decompose the problems into formal sequences of steps
(algorithms)
Algorithms in Computer Science
24
 Algorithms can be expressed as pseudocode, through flowcharts or
program code
Pseudocode and Flowcharts
BFS(node)
{
queue  node
while queue not empty
v  queue
print v
for each child c of v
queue  c
}
Pseudo-code Flowchart
public void DFS(Node node)
{
Print(node.Name);
for (int i = 0; i < node.
Children.Count; i++)
{
if (!visited[node.Id])
DFS(node.Children[i]);
}
visited[node.Id] = true;
}
Source code
 Sorting and searching
 Dynamic programming
 Graph algorithms
 DFS and BFS traversals
 Combinatorial algorithms
 Recursive algorithms
 Other algorithms
 Greedy algorithms, computational geometry, randomized
algorithms, parallel algorithms, genetic algorithms
25
Some Algorithms in Programming
Algorithm Complexity
Asymptotic Notation
27
 Why should we analyze algorithms?
 Predict the resources the algorithm will need
 Computational time (CPU consumption)
 Memory space (RAM consumption)
 Communication bandwidth consumption
 The expected running time of an algorithm is:
 The total number of primitive operations executed
(machine independent steps)
 Also known as algorithm complexity
Algorithm Analysis
28
 What to measure?
 CPU time
 Memory consumption
 Number of steps
 Number of particular operations
 Number of disk operations
 Number of network packets
 Asymptotic complexity
Algorithmic Complexity
29
 Worst-case
 An upper bound on the running time for any input of given size
 Typically algorithms performance is measured for their worst case
 Average-case
 The running time averaged over all possible inputs
 Used to measure algorithms that are repeated many times
 Best-case
 The lower bound on the running time (the optimal case)
Time Complexity
 Sequential search in a list of size n
 Worst-case:
 n comparisons
 Best-case:
 1 comparison
 Average-case:
 n/2 comparisons
 The algorithm runs in linear time
 Linear number of operations
30
Time Complexity: Example
… … … … … … …
n
31
 Algorithm complexity is a rough estimation of the number of steps
performed by given computation, depending on the size of the input
 Measured with asymptotic notation
 O(g) where g is a function of the size of the input data
 Examples:
 Linear complexity O(n)
 All elements are processed once (or constant number of times)
 Quadratic complexity O(n2)
 Each of the elements is processed n times
Algorithms Complexity
32
 Asymptotic upper bound
 O-notation (Big O notation)
 For a given function g(n), we denote by O(g(n)) the set of functions
that are different than g(n) by a constant
 Examples:
 3 * n2 + n/2 + 12 ∈ O(n2)
 4*n*log2(3*n+1) + 2*n-1 ∈ O(n * log n)
Asymptotic Notation: Definition
O(g(n)) = {f(n): there exist positive constants c and n0
such that f(n) <= c*g(n) for all n >= n0}
33
 О(n) means a function grows
linearly when n increases
 E.g.
 O(n2) means a function grows
exponentially when n increases
 E.g.
 O(1) means a function does not
grow when n changes
 E.g.
Functions Growth Rate
n
ƒ(n)
ƒ(n)=n+1
ƒ(n)=n2+2n+2
ƒ(n)=4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
34
Positive examples:
Examples
Negative examples:
35
Asymptotic Functions
36
Complexity Notation Description
constant O(1)
Constant number of operations, not
depending on the input data size, e.g.
n = 1 000 000  1-2 operations
logarithmic O(log n)
Number of operations proportional to
log2(n) where n is the size of the input
data, e.g.
n = 1 000 000 000  30 operations
linear O(n)
Number of operations proportional to the
input data size, e.g. n = 10 000  5 000
operations
Typical Complexities
37
Complexity Notation Description
quadratic O(n2)
Number of operations proportional to the
square of the size of the input data, e.g.
n = 500  250 000 operations
cubic O(n3)
Number of operations propor-tional to
the cube of the size of the input data, e.g.
n = 200  8 000 000 operations
exponential
O(2n),
O(kn),
O(n!)
Exponential number of operations, fast
growing, e.g. n = 20  1 048 576
operations
Typical Complexities (2)
38
Function Values
39
Time Complexity and Program Speed
Complexity 10 20 50 100 1 000 10 000 100 000
O(1) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s
O(log(n)) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s
O(n) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s
O(n*log(n)) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s
O(n2) < 1 s < 1 s < 1 s < 1 s < 1 s 2 s 3-4 min
O(n3) < 1 s < 1 s < 1 s < 1 s 20 s 5 hours 231 days
O(2n) < 1 s < 1 s 260 days hangs hangs hangs hangs
O(n!) < 1 s hangs hangs hangs hangs hangs hangs
O(nn) 3-4 min hangs hangs hangs hangs hangs hangs
40
 Complexity can be expressed as a formula of multiple variables, e.g.
 Algorithm filling a matrix of size n * m with the natural numbers 1,
2, … n*m will run in O(n*m)
 Algorithms to traverse a graph with n vertices and m edges will
take O(n + m) steps
 Memory consumption should also be considered, for example:
 Running time O(n) & memory requirement O(n2)
 n = 50 000  OutOfMemoryException
Time and Memory Complexity
Is it possible in
practice? In theory?
41
Theory vs. Practice
42
 A linear algorithm could be slower than a quadratic algorithm
 The hidden constant could be significant
 Example:
 Algorithm A performs 100*n steps  O(n)
 Algorithm B performs n*(n-1)/2 steps  O(n2)
 For n < 200, algorithm B is faster
 Real-world example:
 The "insertion sort" is faster than "quicksort" for n < 9
The Hidden Constant
43
Amortized Analysis
 Worst case: O(n2)
 Average case: O(n) – Why?
void AddOne(char[] chars, int m)
{
for (int i = 0; 1 != chars[i] && i < m; i++)
{
c[i] = 1 - c[i];
}
}
44
 Complexity: O(n3)
Using Math
sum = 0;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i*i; j++)
{
sum++;
}
}
45
 Just calculate and print sum = n * (n + 1) * (2n + 1) / 6
Using a Barometer
uint sum = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < i*i; j++)
{
sum++;
}
}
Console.WriteLine(sum);
46
 A polynomial-time algorithm has worst-case time complexity
bounded above by a polynomial function of its input size
 Examples:
 Polynomial time: 2n, 3n3 + 4n
 Exponential time: 2n, 3n, nk, n!
 Exponential algorithms hang for large input data sets
Polynomial Algorithms
W(n) ∈ O(p(n))
47
 Computational complexity theory divides the computational
problems into several classes:
Computational Classes
48
P vs. NP: Problem #1 in Computer Science Today
Analyzing the Complexity of Algorithms
Examples
 Runs in O(n) where n is the size of the array
 The number of elementary steps is ~ n
Complexity Examples
int FindMaxElement(int[] array)
{
int max = array[0];
for (int i = 1; i < array.length; i++)
{
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
50
 Runs in O(n2) where n is the size of the array
 The number of elementary steps is ~ n * (n+1) / 2
Complexity Examples (2)
long FindInversions(int[] array)
{
long inversions = 0;
for (int i = 0; i < array.Length; i++)
for (int j = i + 1; j < array.Length; i++)
if (array[i] > array[j])
inversions++;
return inversions;
}
51
 Runs in cubic time O(n3)
 The number of elementary steps is ~ n3
Complexity Examples (3)
decimal Sum3(int n)
{
decimal sum = 0;
for (int a = 0; a < n; a++)
for (int b = 0; b < n; b++)
for (int c = 0; c < n; c++)
sum += a * b * c;
return sum;
}
52
 Runs in quadratic time O(n*m)
 The number of elementary steps is ~ n*m
Complexity Examples (4)
long SumMN(int n, int m)
{
long sum = 0;
for (int x = 0; x < n; x++)
for (int y = 0; y < m; y++)
sum += x * y;
return sum;
}
53
 Runs in quadratic time O(n*m)
 The number of elementary steps is ~ n*m + min(m,n)*n
Complexity Examples (5)
long SumMN(int n, int m)
{
long sum = 0;
for (int x = 0; x < n; x++)
for (int y = 0; y < m; y++)
if (x == y)
for (int i = 0; i < n; i++)
sum += i * x * y;
return sum;
}
54
 Runs in exponential time O(2n)
 The number of elementary steps is ~ 2n
Complexity Examples (6)
decimal Calculation(int n)
{
decimal result = 0;
for (int i = 0; i < (1<<n); i++)
result += i;
return result;
}
55
 Runs in linear time O(n)
 The number of elementary steps is ~ n
Complexity Examples (7)
decimal Factorial(int n)
{
if (n == 0)
return 1;
else
return n * Factorial(n - 1);
}
56
 Runs in exponential time O(2n)
 The number of elementary steps is ~ Fib(n+1)
where Fib(k) is the kth Fibonacci's number
Complexity Examples (8)
decimal Fibonacci(int n)
{
if (n == 0)
return 1;
else if (n == 1)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
57
 fib(n) makes about fib(n) recursive calls
 The same value is calculated many, many times!
Fibonacci Recursion Tree
58
Lab Exercise
Calculating Complexity of Existing Code
60
 Data structures organize data in computer systems for efficient use
 Abstract data types (ADT) describe a set of operations
 Collections hold a group of elements
 Algorithms are sequences of steps for calculating / doing something
 Algorithm complexity is a rough estimation of the number of steps
performed by given computation
 Can be logarithmic, linear, n log n, square, cubic, exponential, etc.
 Complexity predicts the speed of given code before its execution
Summary
?
Data Structures, Algorithms and Complexity
https://softuni.bg/trainings/1308/data-structures-february-2016
License
 This course (slides, examples, labs, videos, homework, etc.)
is licensed under the "Creative Commons Attribution-
NonCommercial-ShareAlike 4.0 International" license
62
 Attribution: this work may contain portions from
 "Fundamentals of Computer Programming with C#" book by Svetlin Nakov & Co. under CC-BY-SA license
 "Data Structures and Algorithms" course by Telerik Academy under CC-BY-NC-SA license
Free Trainings @ Software University
 Software University Foundation – softuni.org
 Software University – High-Quality Education,
Profession and Job for Software Developers
 softuni.bg
 Software University @ Facebook
 facebook.com/SoftwareUniversity
 Software University @ YouTube
 youtube.com/SoftwareUniversity
 Software University Forums – forum.softuni.bg

More Related Content

DOC
Time and space complexity
PPT
Algorithm analysis basics - Seven Functions/Big-Oh/Omega/Theta
PPTX
Insertion sort
PPT
BINARY TREE REPRESENTATION.ppt
PPTX
Complexity analysis in Algorithms
PPT
Data Structures- Part5 recursion
PPTX
Parsing in Compiler Design
PPTX
Greedy Algorithm - Knapsack Problem
Time and space complexity
Algorithm analysis basics - Seven Functions/Big-Oh/Omega/Theta
Insertion sort
BINARY TREE REPRESENTATION.ppt
Complexity analysis in Algorithms
Data Structures- Part5 recursion
Parsing in Compiler Design
Greedy Algorithm - Knapsack Problem

What's hot (20)

PPT
SEARCHING AND SORTING ALGORITHMS
PPTX
Blow fish final ppt
PPT
backpropagation in neural networks
PPT
Backtracking Algorithm.ppt
PPTX
Design and Analysis of Algorithms.pptx
PPTX
Selection sorting
PDF
Code generation in Compiler Design
PPTX
Brute force method
PPTX
Delay , Loss & Throughput
PPT
Fundamentals of the Analysis of Algorithm Efficiency
PPT
Security attacks
PPTX
Sorting algorithms
PPTX
fitness function
PPTX
PPTX
Asymptotic Notation
PPTX
Three Address code
PPTX
Asymptotic Notations
PPTX
Key management
PPTX
Uninformed Search technique
PPTX
Insertion sort
SEARCHING AND SORTING ALGORITHMS
Blow fish final ppt
backpropagation in neural networks
Backtracking Algorithm.ppt
Design and Analysis of Algorithms.pptx
Selection sorting
Code generation in Compiler Design
Brute force method
Delay , Loss & Throughput
Fundamentals of the Analysis of Algorithm Efficiency
Security attacks
Sorting algorithms
fitness function
Asymptotic Notation
Three Address code
Asymptotic Notations
Key management
Uninformed Search technique
Insertion sort
Ad

Similar to 19. Data Structures and Algorithm Complexity (20)

PPTX
19. Java data structures algorithms and complexity
PDF
jn;lm;lkm';m';;lmppt of data structure.pdf
PDF
Iare ds ppt_3
PPTX
ADS Introduction
PDF
Chapter 1 Introduction to Data Structures and Algorithms.pdf
PDF
DATA STRUCTURE
PDF
DATA STRUCTURE.pdf
PPTX
19. algorithms and-complexity
PDF
Data_structure using C-Adi.pdf
PPT
assignment character education assignment
PPTX
Chapter 1 Data structure _Algorithms.pptx
DOCX
3rd-Sem_CSE_Data-Structures and Applications.docx
PPTX
Data Structures unit I Introduction - data types
PPTX
Introduction to data structures and its types
PPTX
Algorithm Complexity and Main Concepts
PDF
Unit 1 OF DS FOR AI DS BTRCH OF DS FOR AI DS BTRCH .pdf
PPT
Introduction to Data Structures Sorting and searching
PDF
U nit i data structure-converted
PPTX
data structure and algoriythm pres.pptxD
19. Java data structures algorithms and complexity
jn;lm;lkm';m';;lmppt of data structure.pdf
Iare ds ppt_3
ADS Introduction
Chapter 1 Introduction to Data Structures and Algorithms.pdf
DATA STRUCTURE
DATA STRUCTURE.pdf
19. algorithms and-complexity
Data_structure using C-Adi.pdf
assignment character education assignment
Chapter 1 Data structure _Algorithms.pptx
3rd-Sem_CSE_Data-Structures and Applications.docx
Data Structures unit I Introduction - data types
Introduction to data structures and its types
Algorithm Complexity and Main Concepts
Unit 1 OF DS FOR AI DS BTRCH OF DS FOR AI DS BTRCH .pdf
Introduction to Data Structures Sorting and searching
U nit i data structure-converted
data structure and algoriythm pres.pptxD
Ad

More from Intro C# Book (20)

PPTX
17. Java data structures trees representation and traversal
PPTX
Java Problem solving
PPTX
21. Java High Quality Programming Code
PPTX
20.5 Java polymorphism
PPTX
20.4 Java interfaces and abstraction
PPTX
20.3 Java encapsulation
PPTX
20.2 Java inheritance
PPTX
20.1 Java working with abstraction
PPTX
18. Java associative arrays
PPTX
16. Java stacks and queues
PPTX
14. Java defining classes
PPTX
13. Java text processing
PPTX
12. Java Exceptions and error handling
PPTX
11. Java Objects and classes
PPTX
09. Java Methods
PPTX
05. Java Loops Methods and Classes
PPTX
07. Java Array, Set and Maps
PPTX
03 and 04 .Operators, Expressions, working with the console and conditional s...
PPTX
02. Data Types and variables
PPTX
01. Introduction to programming with java
17. Java data structures trees representation and traversal
Java Problem solving
21. Java High Quality Programming Code
20.5 Java polymorphism
20.4 Java interfaces and abstraction
20.3 Java encapsulation
20.2 Java inheritance
20.1 Java working with abstraction
18. Java associative arrays
16. Java stacks and queues
14. Java defining classes
13. Java text processing
12. Java Exceptions and error handling
11. Java Objects and classes
09. Java Methods
05. Java Loops Methods and Classes
07. Java Array, Set and Maps
03 and 04 .Operators, Expressions, working with the console and conditional s...
02. Data Types and variables
01. Introduction to programming with java

Recently uploaded (20)

PPTX
Tìm hiểu về dịch vụ FTTH - Fiber Optic Access Node
PDF
simpleintnettestmetiaerl for the simple testint
PDF
BIOCHEM CH2 OVERVIEW OF MICROBIOLOGY.pdf
PDF
Course Overview and Agenda cloud security
PDF
Top 8 Trusted Sources to Buy Verified Cash App Accounts.pdf
PPTX
MY PRESENTATION66666666666666666666.pptx
PDF
Containerization lab dddddddddddddddmanual.pdf
PPTX
最新版美国埃默里大学毕业证(Emory毕业证书)原版定制文凭学历认证
PDF
Alethe Consulting Corporate Profile and Solution Aproach
PPTX
Viva Digitally Software-Defined Wide Area Network.pptx
PDF
KEY COB2 UNIT 1: The Business of businessĐH KInh tế TP.HCM
PPTX
Concepts of Object Oriented Programming.
PDF
Understand the Gitlab_presentation_task.pdf
PPTX
Artificial_Intelligence_Basics use in our daily life
PDF
healthwealthtech4all-blogspot-com-2025-08-top-5-tech-innovations-that-will-ht...
PPT
12 Things That Make People Trust a Website Instantly
PPTX
10.2981-wlb.2004.021Figurewlb3bf00068fig0001.pptx
PDF
Buy Cash App Verified Accounts Instantly – Secure Crypto Deal.pdf
PDF
Uptota Investor Deck - Where Africa Meets Blockchain
PDF
The Evolution of Traditional to New Media .pdf
Tìm hiểu về dịch vụ FTTH - Fiber Optic Access Node
simpleintnettestmetiaerl for the simple testint
BIOCHEM CH2 OVERVIEW OF MICROBIOLOGY.pdf
Course Overview and Agenda cloud security
Top 8 Trusted Sources to Buy Verified Cash App Accounts.pdf
MY PRESENTATION66666666666666666666.pptx
Containerization lab dddddddddddddddmanual.pdf
最新版美国埃默里大学毕业证(Emory毕业证书)原版定制文凭学历认证
Alethe Consulting Corporate Profile and Solution Aproach
Viva Digitally Software-Defined Wide Area Network.pptx
KEY COB2 UNIT 1: The Business of businessĐH KInh tế TP.HCM
Concepts of Object Oriented Programming.
Understand the Gitlab_presentation_task.pdf
Artificial_Intelligence_Basics use in our daily life
healthwealthtech4all-blogspot-com-2025-08-top-5-tech-innovations-that-will-ht...
12 Things That Make People Trust a Website Instantly
10.2981-wlb.2004.021Figurewlb3bf00068fig0001.pptx
Buy Cash App Verified Accounts Instantly – Secure Crypto Deal.pdf
Uptota Investor Deck - Where Africa Meets Blockchain
The Evolution of Traditional to New Media .pdf

19. Data Structures and Algorithm Complexity

  • 1. SoftUni Team Technical Trainers Software University http://softuni.bg Data Structures, Algorithms and Complexity Analyzing Algorithm Complexity. Asymptotic Notation
  • 2. Table of Contents 1. Data Structures  Linear Structures, Trees, Hash Tables, Others 2. Algorithms  Sorting and Searching, Combinatorics, Dynamic Programming, Graphs, Others 3. Complexity of Algorithms  Time and Space Complexity  Mean, Average and Worst Case  Asymptotic Notation O(g) 2
  • 4. 4  Examples of data structures:  Person structure (first name + last name + age)  Array of integers – int[]  List of strings – List<string>  Queue of people – Queue<Person> What is a Data Structure? “In computer science, a data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently.” -- Wikipedia
  • 5. 5 Student Data Structure struct Student { string Name { get; set; } short Age { get; set; } // Student age (< 128) Gender Gender { get; set; } int FacultyNumber { get; set; } }; enum Gender { Male, Female, Other } Student Name Maria Smith Age 23 Gender Female FacultyNumber SU2007333
  • 7. 7 Stack class Stack<T> { // Pushes an elements at the top of the stack void Push(T data); // Extracts the element at the top of the stack T Pop(); // Checks for empty stack bool IsEmpty(); } // The type T can be any data structure like // int, string, DateTime, Student
  • 8. 8 Queue data data data data data data data Start of the queue: elements are excluded from this position End of the queue: new elements are inserted here
  • 9. 9 Queue class Queue<T> { // Appends an elements at the end of the queue void Enqueue(T data); // Extracts the element from the start of the queue T Dequeue(); // Checks for empty queue bool IsEmpty(); } // The type T can be any data structure like // int, string, DateTime, Student
  • 11. 11 Trees 17 15149 6 5 8 Project Manager Team Leader Designer QA Team Leader Developer 1 Developer 2 Tester 1 Developer 3 Tester 2
  • 15. 15 Hash-Table: Structure h("Pesho") = 4 h("Kiro") = 2 h("Mimi") = 1 h("Ivan") = 2 h("Lili") = m-1 Ivan null null null null Mimi Kiro null Pesho … Lili 0 1 2 3 4 … m-1 T null collision Chaining the elements in case of collision
  • 16. 16  Data structures and algorithms are the foundation of computer programming  Algorithmic thinking, problem solving and data structures are vital for software engineers  C# developers should know when to use T[], LinkedList<T>, List<T>, Stack<T>, Queue<T>, Dictionary<K, T>, HashSet<T>, SortedDictionary<K, T> and SortedSet<T>  Computational complexity is important for algorithm design and efficient programming Why Are Data Structures So Important?
  • 17.  Primitive data types  Numbers: int, float, double, decimal, …  Text data: char, string, … Simple structures  A group of primitive fields stored together  E.g. DateTime, Point, Rectangle, Color, …  Collections  A set / sequence of elements (of the same type)  E.g. array, list, stack, queue, tree, hashtable, bag, … Primitive Types and Collections 17
  • 18.  An Abstract Data Type (ADT) is  A data type together with the operations, whose properties are specified independently of any particular implementation  ADT is a set of definitions of operations  Like the interfaces in C# / Java  Defines what we can do with the structure  ADT can have several different implementations  Different implementations can have different efficiency, inner logic and resource needs Abstract Data Types (ADT) 18
  • 19.  Linear structures  Lists: fixed size and variable size sequences  Stacks: LIFO (Last In First Out) structures  Queues: FIFO (First In First Out) structures  Trees and tree-like structures  Binary, ordered search trees, balanced trees, etc.  Dictionaries (maps, associative arrays)  Hold pairs (key  value)  Hash tables: use hash functions to search / insert Basic Data Structures 19
  • 20. 20  Sets, multi-sets and bags  Set – collection of unique elements  Bag – collection of non-unique elements  Ordered sets and dictionaries  Priority queues / heaps  Special tree structures  Suffix tree, interval tree, index tree, trie, rope, …  Graphs  Directed / undirected, weighted / unweighted, connected / non-connected, cyclic / acyclic, … Basic Data Structures (2)
  • 22. 22  The term "algorithm" means "a sequence of steps"  Derived from Muḥammad Al-Khwārizmī', a Persian mathematician and astronomer  He described an algorithm for solving quadratic equations in 825 What is an Algorithm? “In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. An algorithm is an effective method expressed as a finite list of well- defined instructions for calculating a function.” -- Wikipedia
  • 23. 23  Algorithms are fundamental in programming  Imperative (traditional, algorithmic) programming means to describe in formal steps how to do something  Algorithm == sequence of operations (steps)  Can include branches (conditional blocks) and repeated logic (loops)  Algorithmic thinking (mathematical thinking, logical thinking, engineering thinking)  Ability to decompose the problems into formal sequences of steps (algorithms) Algorithms in Computer Science
  • 24. 24  Algorithms can be expressed as pseudocode, through flowcharts or program code Pseudocode and Flowcharts BFS(node) { queue  node while queue not empty v  queue print v for each child c of v queue  c } Pseudo-code Flowchart public void DFS(Node node) { Print(node.Name); for (int i = 0; i < node. Children.Count; i++) { if (!visited[node.Id]) DFS(node.Children[i]); } visited[node.Id] = true; } Source code
  • 25.  Sorting and searching  Dynamic programming  Graph algorithms  DFS and BFS traversals  Combinatorial algorithms  Recursive algorithms  Other algorithms  Greedy algorithms, computational geometry, randomized algorithms, parallel algorithms, genetic algorithms 25 Some Algorithms in Programming
  • 27. 27  Why should we analyze algorithms?  Predict the resources the algorithm will need  Computational time (CPU consumption)  Memory space (RAM consumption)  Communication bandwidth consumption  The expected running time of an algorithm is:  The total number of primitive operations executed (machine independent steps)  Also known as algorithm complexity Algorithm Analysis
  • 28. 28  What to measure?  CPU time  Memory consumption  Number of steps  Number of particular operations  Number of disk operations  Number of network packets  Asymptotic complexity Algorithmic Complexity
  • 29. 29  Worst-case  An upper bound on the running time for any input of given size  Typically algorithms performance is measured for their worst case  Average-case  The running time averaged over all possible inputs  Used to measure algorithms that are repeated many times  Best-case  The lower bound on the running time (the optimal case) Time Complexity
  • 30.  Sequential search in a list of size n  Worst-case:  n comparisons  Best-case:  1 comparison  Average-case:  n/2 comparisons  The algorithm runs in linear time  Linear number of operations 30 Time Complexity: Example … … … … … … … n
  • 31. 31  Algorithm complexity is a rough estimation of the number of steps performed by given computation, depending on the size of the input  Measured with asymptotic notation  O(g) where g is a function of the size of the input data  Examples:  Linear complexity O(n)  All elements are processed once (or constant number of times)  Quadratic complexity O(n2)  Each of the elements is processed n times Algorithms Complexity
  • 32. 32  Asymptotic upper bound  O-notation (Big O notation)  For a given function g(n), we denote by O(g(n)) the set of functions that are different than g(n) by a constant  Examples:  3 * n2 + n/2 + 12 ∈ O(n2)  4*n*log2(3*n+1) + 2*n-1 ∈ O(n * log n) Asymptotic Notation: Definition O(g(n)) = {f(n): there exist positive constants c and n0 such that f(n) <= c*g(n) for all n >= n0}
  • 33. 33  О(n) means a function grows linearly when n increases  E.g.  O(n2) means a function grows exponentially when n increases  E.g.  O(1) means a function does not grow when n changes  E.g. Functions Growth Rate n ƒ(n) ƒ(n)=n+1 ƒ(n)=n2+2n+2 ƒ(n)=4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  • 36. 36 Complexity Notation Description constant O(1) Constant number of operations, not depending on the input data size, e.g. n = 1 000 000  1-2 operations logarithmic O(log n) Number of operations proportional to log2(n) where n is the size of the input data, e.g. n = 1 000 000 000  30 operations linear O(n) Number of operations proportional to the input data size, e.g. n = 10 000  5 000 operations Typical Complexities
  • 37. 37 Complexity Notation Description quadratic O(n2) Number of operations proportional to the square of the size of the input data, e.g. n = 500  250 000 operations cubic O(n3) Number of operations propor-tional to the cube of the size of the input data, e.g. n = 200  8 000 000 operations exponential O(2n), O(kn), O(n!) Exponential number of operations, fast growing, e.g. n = 20  1 048 576 operations Typical Complexities (2)
  • 39. 39 Time Complexity and Program Speed Complexity 10 20 50 100 1 000 10 000 100 000 O(1) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s O(log(n)) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s O(n) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s O(n*log(n)) < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s < 1 s O(n2) < 1 s < 1 s < 1 s < 1 s < 1 s 2 s 3-4 min O(n3) < 1 s < 1 s < 1 s < 1 s 20 s 5 hours 231 days O(2n) < 1 s < 1 s 260 days hangs hangs hangs hangs O(n!) < 1 s hangs hangs hangs hangs hangs hangs O(nn) 3-4 min hangs hangs hangs hangs hangs hangs
  • 40. 40  Complexity can be expressed as a formula of multiple variables, e.g.  Algorithm filling a matrix of size n * m with the natural numbers 1, 2, … n*m will run in O(n*m)  Algorithms to traverse a graph with n vertices and m edges will take O(n + m) steps  Memory consumption should also be considered, for example:  Running time O(n) & memory requirement O(n2)  n = 50 000  OutOfMemoryException Time and Memory Complexity Is it possible in practice? In theory?
  • 42. 42  A linear algorithm could be slower than a quadratic algorithm  The hidden constant could be significant  Example:  Algorithm A performs 100*n steps  O(n)  Algorithm B performs n*(n-1)/2 steps  O(n2)  For n < 200, algorithm B is faster  Real-world example:  The "insertion sort" is faster than "quicksort" for n < 9 The Hidden Constant
  • 43. 43 Amortized Analysis  Worst case: O(n2)  Average case: O(n) – Why? void AddOne(char[] chars, int m) { for (int i = 0; 1 != chars[i] && i < m; i++) { c[i] = 1 - c[i]; } }
  • 44. 44  Complexity: O(n3) Using Math sum = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= i*i; j++) { sum++; } }
  • 45. 45  Just calculate and print sum = n * (n + 1) * (2n + 1) / 6 Using a Barometer uint sum = 0; for (i = 0; i < n; i++) { for (j = 0; j < i*i; j++) { sum++; } } Console.WriteLine(sum);
  • 46. 46  A polynomial-time algorithm has worst-case time complexity bounded above by a polynomial function of its input size  Examples:  Polynomial time: 2n, 3n3 + 4n  Exponential time: 2n, 3n, nk, n!  Exponential algorithms hang for large input data sets Polynomial Algorithms W(n) ∈ O(p(n))
  • 47. 47  Computational complexity theory divides the computational problems into several classes: Computational Classes
  • 48. 48 P vs. NP: Problem #1 in Computer Science Today
  • 49. Analyzing the Complexity of Algorithms Examples
  • 50.  Runs in O(n) where n is the size of the array  The number of elementary steps is ~ n Complexity Examples int FindMaxElement(int[] array) { int max = array[0]; for (int i = 1; i < array.length; i++) { if (array[i] > max) { max = array[i]; } } return max; } 50
  • 51.  Runs in O(n2) where n is the size of the array  The number of elementary steps is ~ n * (n+1) / 2 Complexity Examples (2) long FindInversions(int[] array) { long inversions = 0; for (int i = 0; i < array.Length; i++) for (int j = i + 1; j < array.Length; i++) if (array[i] > array[j]) inversions++; return inversions; } 51
  • 52.  Runs in cubic time O(n3)  The number of elementary steps is ~ n3 Complexity Examples (3) decimal Sum3(int n) { decimal sum = 0; for (int a = 0; a < n; a++) for (int b = 0; b < n; b++) for (int c = 0; c < n; c++) sum += a * b * c; return sum; } 52
  • 53.  Runs in quadratic time O(n*m)  The number of elementary steps is ~ n*m Complexity Examples (4) long SumMN(int n, int m) { long sum = 0; for (int x = 0; x < n; x++) for (int y = 0; y < m; y++) sum += x * y; return sum; } 53
  • 54.  Runs in quadratic time O(n*m)  The number of elementary steps is ~ n*m + min(m,n)*n Complexity Examples (5) long SumMN(int n, int m) { long sum = 0; for (int x = 0; x < n; x++) for (int y = 0; y < m; y++) if (x == y) for (int i = 0; i < n; i++) sum += i * x * y; return sum; } 54
  • 55.  Runs in exponential time O(2n)  The number of elementary steps is ~ 2n Complexity Examples (6) decimal Calculation(int n) { decimal result = 0; for (int i = 0; i < (1<<n); i++) result += i; return result; } 55
  • 56.  Runs in linear time O(n)  The number of elementary steps is ~ n Complexity Examples (7) decimal Factorial(int n) { if (n == 0) return 1; else return n * Factorial(n - 1); } 56
  • 57.  Runs in exponential time O(2n)  The number of elementary steps is ~ Fib(n+1) where Fib(k) is the kth Fibonacci's number Complexity Examples (8) decimal Fibonacci(int n) { if (n == 0) return 1; else if (n == 1) return 1; else return Fibonacci(n-1) + Fibonacci(n-2); } 57
  • 58.  fib(n) makes about fib(n) recursive calls  The same value is calculated many, many times! Fibonacci Recursion Tree 58
  • 60. 60  Data structures organize data in computer systems for efficient use  Abstract data types (ADT) describe a set of operations  Collections hold a group of elements  Algorithms are sequences of steps for calculating / doing something  Algorithm complexity is a rough estimation of the number of steps performed by given computation  Can be logarithmic, linear, n log n, square, cubic, exponential, etc.  Complexity predicts the speed of given code before its execution Summary
  • 61. ? Data Structures, Algorithms and Complexity https://softuni.bg/trainings/1308/data-structures-february-2016
  • 62. License  This course (slides, examples, labs, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" license 62  Attribution: this work may contain portions from  "Fundamentals of Computer Programming with C#" book by Svetlin Nakov & Co. under CC-BY-SA license  "Data Structures and Algorithms" course by Telerik Academy under CC-BY-NC-SA license
  • 63. Free Trainings @ Software University  Software University Foundation – softuni.org  Software University – High-Quality Education, Profession and Job for Software Developers  softuni.bg  Software University @ Facebook  facebook.com/SoftwareUniversity  Software University @ YouTube  youtube.com/SoftwareUniversity  Software University Forums – forum.softuni.bg

Editor's Notes

  • #28: 27##
  • #29: 28##
  • #30: 29##
  • #31: 30##
  • #33: 32##
  • #47: 46##
  • #50: 49##
  • #51: 50##
  • #52: 51##
  • #53: 52##
  • #54: 53##
  • #55: 54##
  • #56: 55##
  • #57: 56##
  • #58: 57##
  • #61: (c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*