Computational Complexity, Choosing Data Structures Svetlin Nakov Telerik Software Academy Manager Technical Trainer

Slides:



Advertisements
Similar presentations
Computational Complexity, Choosing Data Structures Svetlin Nakov Telerik Corporation
Advertisements

Windows Basic and Dynamic Disk Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator Marian Marinov CEO of 1H Ltd.
Make swiftly iOS development Telerik Academy Telerik Academy Plus.
Amazon S 3, App Engine Blobstore, Google Cloud Storage, Azure Blobs Svetlin Nakov Telerik Software Academy academy.telerik.com.
RPN and Shunting-yard algorithm Ivaylo Kenov Telerik Software Academy academy.telerik.com Technical Assistant
Shortest paths in edge-weighted digraph Krasin Georgiev Technical University of Sofia g.krasin at gmail com Assistant Professor.
Telerik Software Academy Telerik School Academy.
Asynchronous Programming with C# and WinRT
Overview of the Max-flow problem with sample code and example problem. Georgi Stoyanov Sofia University Student at.
Character sequences, C-strings and the C++ String class, Working with Strings Learning & Development Team Telerik Software Academy.
Done already for your convenience! Telerik School Academy Unity 2D Game Development.
Processing Sequences of Elements Telerik School Academy C# Fundamentals – Part 1.
C# Fundamentals – Part I
NoSQL Concepts, Redis, MongoDB, CouchDB
The Business Plan and the Business Model Margarita Antonova Volunteer Telerik Academy academy.telerik.com Business System Analyst Telerik Corporation.
What are ADTs, STL Intro, vector, list, queue, stack Learning & Development Team Telerik Software Academy.
Making JavaScript code by template! Learning & Development Team Telerik Software Academy.
Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training Who, What, Why?
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Processing Matrices and Multidimensional Tables Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Learning & Development Telerik Software Academy.
Reading and Writing Text Files Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Classical OOP in JavaScript Classes and stuff Telerik Software Academy
Overview of Data Structures and Basic Algorithms. Computational Complexity. Asymptotic Notation Svetlin Nakov Telerik Software Academy academy.telerik.com.
Optimization problems, Greedy Algorithms, Optimal Substructure and Greedy choice Learning & Development Team Telerik Software.
NoSQL Concepts, Redis, MongoDB, CouchDB Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
New features: classes, generators, iterators, etc. Telerik Academy Plus JavaScript.Next.
Throwing and Catching Exceptions Tran Anh Tuan Edit from Telerik Software Academy
Loops, Conditional Statements, Functions Tran Anh Tuan Edit from Telerik Academy
Private/Public fields, Module, Revealing Module Learning & Development Team Telerik Software Academy.
Building Data-Driven ASP.NET Web Forms Apps Telerik Software Academy ASP.NET Web Forms.
Course Introduction Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
General and reusable solutions to common problems in software design Vasil Dininski Telerik Software Academy academy.telerik.com Intern at Telerik Academy.
Planning and Tracking Software Quality Yordan Dimitrov Telerik Corporation Team Leader, Team Pulse, Team Leader, Team Pulse, Telerik Corporation,
What you need to know Ivaylo Kenov Telerik Corporation Telerik Academy Student.
Data binding concepts, Bindings in WinJS George Georgiev Telerik Software Academy academy.telerik.com Technical Trainer itgeorge.net.
Pavel Kolev Telerik Software Academy Senior.Net Developer and Trainer
Objects, Properties, Primitive and Reference Types Learning & Development Team Telerik Software Academy.
When and How to Refactor? Refactoring Patterns Alexander Vakrilov Telerik Corporation Senior Developer and Team Leader.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Free Training and Job for Software Engineers Svetlin Nakov, PhD Manager Technical Training Telerik Corp. Telerik Software Academy.
Access to known folders, using pickers, writing to and reading from files, caching files for future access George Georgiev Telerik Software Academy academy.telerik.com.
Computational Complexity, Choosing Data Structures Svetlin Nakov Telerik Corporation
Doing the Canvas the "easy way"! Learning & Development Telerik Software Academy.
Creating and Running Your First C# Program Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical Training
Course Overview Doncho Minkov Telerik Software Academy Technical Trainer
Subroutines in Computer Programming Telerik School Academy C# Fundamentals – Part 1.
Computational Complexity of Fundamental Data Structures, Choosing a Data Structure.
Data Types, Primitive Types in C++, Variables – Declaration, Initialization, Scope Telerik Software Academy academy.telerik.com Learning and Development.
Learn to Design Error Steady Code Svetlin Nakov Telerik Software Academy academy.telerik.com Technical Trainer
Connecting, Queries, Best Practices Tran Anh Tuan Edit from Telerik Software Academy
Processing Sequences of Elements Telerik Software Academy C# Fundamentals – Part 2.
Telerik JavaScript Framework Telerik Software Academy Hybrid Mobile Applications.
Building Rock-Solid Software Nikolay Kostov Telerik Software Academy academy.telerik.com Senior Software Developer and Technical Trainer
Telerik Software Academy Databases.
Things start to get serious Telerik Software Academy JavaScript OOP.
Learning & Development Mobile apps for iPhone & iPad.
Processing Matrices and Multidimensional Tables Telerik Software Academy C# Fundamentals – Part 2.
Nikolay Kostov Telerik Software Academy academy.telerik.com Team Lead, Senior Developer and Trainer
SoftUni Team Technical Trainers Software University Data Structures, Algorithms and Complexity Analyzing Algorithm Complexity. Asymptotic.
Functions and Function Expressions Closures, Function Scope, Nested Functions Telerik Software Academy
Implementing Control Logic in C# Svetlin Nakov Telerik Software Academy academy.telerik.com Manager Technical trainer
Inheritance, Abstraction, Encapsulation, Polymorphism Telerik Software Academy Mobile apps for iPhone & iPad.
Mocking tools for easier unit testing Telerik Software Academy High Quality Code.
Creating and Initializing Arrays, Accessing Elements, Multiple Dimensions Learning & Development Team Telerik Software Academy.
Data Structures and Algorithms Telerik Software Academy
What why and how? Telerik School Academy Unity 2D Game Development.
Windows Security Model Borislav Varadinov Telerik Software Academy academy.telerik.com System Administrator
Complexity Analysis.
Algorithms Complexity and Data Structures Efficiency
Presentation transcript:

Computational Complexity, Choosing Data Structures Svetlin Nakov Telerik Software Academy Manager Technical Trainer

1. Algorithms Complexity and Asymptotic Notation  Time and Memory Complexity  Mean, Average and Worst Case 2. Fundamental Data Structures – Comparison  Arrays vs. Lists vs. Trees vs. Hash-Tables 3. Choosing Proper Data Structure 2

 Data structures and algorithms are the foundation of computer programming  Algorithmic thinking, problem solving and data structures are vital for software engineers  All.NET developers should know when to use T[], LinkedList, List, Stack, Queue, Dictionary, HashSet, SortedDictionary and SortedSet  All.NET developers should know when to use T[], LinkedList, List, Stack, Queue, Dictionary, HashSet, SortedDictionary and SortedSet  Computational complexity is important for algorithm design and efficient programming 3

Asymtotic Notation

 Why we should analyze algorithms?  Predict the resources that the algorithm requires  Computational time (CPU consumption)  Memory space (RAM consumption)  Communication bandwidth consumption  The running time of an algorithm is:  The total number of primitive operations executed (machine independent steps)  Also known as algorithm complexity 5

 What to measure?  CPU Time  Memory  Number of steps  Number of particular operations  Number of disk operations  Number of network packets  Asymptotic complexity 6

 Worst-case  An upper bound on the running time for any input of given size  Average-case  Assume all inputs of a given size are equally likely  Best-case  The lower bound on the running time 7

 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 8…………………n

 Algorithm complexity is rough estimation of the number of steps performed by given computation depending on the size of the input data  Measured through asymptotic notation  O(g) where g is a function of the input data size  Examples:  Linear complexity O(n) – all elements are processed once (or constant number of times)  Quadratic complexity O(n 2 ) – each of the elements is processed n times 9

 Asymptotic upper bound  O-notation (Big O notation)  For 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 * n 2 + n/ ∈ O(n 2 )  4*n*log 2 (3*n+1) + 2*n-1 ∈ O(n * log n) 10 O(g(n)) = { f(n) : there exist positive constants c and n 0 such that f(n) = n 0 }

ComplexityNotationDescriptionconstantO(1) Constant number of operations, not depending on the input data size, e.g. n =  1-2 operations logarithmic O(log n) Number of operations propor- tional of log 2 (n) where n is the size of the input data, e.g. n =  30 operations linearO(n) Number of operations proportional to the input data size, e.g. n =  operations 11

ComplexityNotationDescriptionquadratic O(n 2 ) Number of operations proportional to the square of the size of the input data, e.g. n = 500  operations cubic O(n 3 ) Number of operations propor- tional to the cube of the size of the input data, e.g. n = 200  operations exponential O(2 n ), O(k n ), O(n!) Exponential number of operations, fast growing, e.g. n = 20  operations 12

13Complexity O(1) < 1 s O(log(n)) O(n) O(n*log(n)) O(n 2 ) < 1 s 2 s2 s2 s2 s min O(n 3 ) < 1 s 20 s 5 hours 231 days O(2 n ) < 1 s 260 days hangshangshangshangs O(n!) < 1 s hangshangshangshangshangshangs O(n n ) min hangshangshangshangshangshangs

 Complexity can be expressed as formula on multiple variables, e.g.  Algorithm filling a matrix of size n * m with natural numbers 1, 2, … will run in O(n*m)  DFS traversal of graph with n vertices and m edges will run in O(n + m)  Memory consumption should also be considered, for example:  Running time O(n), memory requirement O(n 2 )  n =  OutOfMemoryException 14

 Sometime a linear algorithm could be slower than quadratic algorithm  The hidden constant should not always be ignored  Example:  Algorithm A makes: 100*n steps  O(n)  Algorithm B makes: n*n/2 steps  O(n 2 )  For n < 200 algorithm B is faster 15

 A polynomial-time algorithm is one whose worst-case time complexity is bounded above by a polynomial function of its input size  Example of worst-case time complexity  Polynomial-time: log n, 2n, 3n 3 + 4n, 2 * n log n  Non polynomial-time : 2 n, 3 n, n k, n!  Non-polynomial algorithms don't work for large input data sets 16 W(n) O(p(n)) W(n) ∈ O(p(n))

Examples

 Runs in O(n) where n is the size of the array  The number of elementary steps is ~ n int FindMaxElement(int[] array) { int max = array[0]; int max = array[0]; for (int i=0; i<array.length; i++) for (int i=0; i<array.length; i++) { if (array[i] > max) if (array[i] > max) { max = array[i]; max = array[i]; } } return max; return max;}

 Runs in O(n 2 ) where n is the size of the array  The number of elementary steps is ~ n*(n+1) / 2 long FindInversions(int[] array) { long inversions = 0; long inversions = 0; for (int i=0; i<array.Length; i++) for (int i=0; i<array.Length; i++) for (int j = i+1; j<array.Length; i++) for (int j = i+1; j<array.Length; i++) if (array[i] > array[j]) if (array[i] > array[j]) inversions++; inversions++; return inversions; return inversions;}

 Runs in cubic time O(n 3 )  The number of elementary steps is ~ n 3 decimal Sum3(int n) { decimal sum = 0; decimal sum = 0; for (int a=0; a<n; a++) for (int a=0; a<n; a++) for (int b=0; b<n; b++) for (int b=0; b<n; b++) for (int c=0; c<n; c++) for (int c=0; c<n; c++) sum += a*b*c; sum += a*b*c; return sum; return sum;}

 Runs in quadratic time O(n*m)  The number of elementary steps is ~ n*m long SumMN(int n, int m) { long sum = 0; long sum = 0; for (int x=0; x<n; x++) for (int x=0; x<n; x++) for (int y=0; y<m; y++) for (int y=0; y<m; y++) sum += x*y; sum += x*y; return sum; return sum;}

 Runs in quadratic time O(n*m)  The number of elementary steps is ~ n*m + min(m,n)*n long SumMN(int n, int m) { long sum = 0; long sum = 0; for (int x=0; x<n; x++) for (int x=0; x<n; x++) for (int y=0; y<m; y++) for (int y=0; y<m; y++) if (x==y) if (x==y) for (int i=0; i<n; i++) for (int i=0; i<n; i++) sum += i*x*y; sum += i*x*y; return sum; return sum;}

 Runs in exponential time O(2 n )  The number of elementary steps is ~ 2 n decimal Calculation(int n) { decimal result = 0; decimal result = 0; for (int i = 0; i < (1<<n); i++) for (int i = 0; i < (1<<n); i++) result += i; result += i; return result; return result;}

 Runs in linear time O(n)  The number of elementary steps is ~ n decimal Factorial(int n) { if (n==0) if (n==0) return 1; return 1; else else return n * Factorial(n-1); return n * Factorial(n-1);}

 Runs in exponential time O(2 n )  The number of elementary steps is ~ Fib(n+1) where Fib(k) is the k -th Fibonacci's number decimal Fibonacci(int n) { if (n == 0) if (n == 0) return 1; return 1; else if (n == 1) else if (n == 1) return 1; return 1; else else return Fibonacci(n-1) + Fibonacci(n-2); return Fibonacci(n-1) + Fibonacci(n-2);}

Examples

Data Structure AddFindDelete Get-by- index Array ( T[] ) O(n)O(n)O(n)O(1) Linked list ( LinkedList ) O(1)O(n)O(n)O(n) Resizable array list ( List ) O(1)O(n)O(n)O(1) Stack ( Stack ) O(1)-O(1)- Queue ( Queue ) O(1)-O(1)- 27

Data Structure AddFindDelete Get-by- index Hash table ( Dictionary ) O(1)O(1)O(1)- Tree-based dictionary ( Sorted Dictionary ) O(log n) - Hash table based set ( HashSet ) O(1)O(1)O(1)- Tree based set ( SortedSet ) O(log n) - 28

 Arrays ( T[] )  Use when fixed number of elements should be processed by index  Resizable array lists ( List )  Use when elements should be added and processed by index  Linked lists ( LinkedList )  Use when elements should be added at the both sides of the list  Otherwise use resizable array list ( List ) 29

 Stacks ( Stack )  Use to implement LIFO (last-in-first-out) behavior  List could also work well  Queues ( Queue )  Use to implement FIFO (first-in-first-out) behavior  LinkedList could also work well  Hash table based dictionary ( Dictionary )  Use when key-value pairs should be added fast and searched fast by key  Elements in a hash table have no particular order 30

 Balanced search tree based dictionary ( SortedDictionary )  Use when key-value pairs should be added fast, searched fast by key and enumerated sorted by key  Hash table based set ( HashSet )  Use to keep a group of unique values, to add and check belonging to the set fast  Elements are in no particular order  Search tree based set ( SortedSet )  Use to keep a group of ordered unique values 31

 Algorithm complexity is rough estimation of the number of steps performed by given computation  Complexity can be logarithmic, linear, n log n, square, cubic, exponential, etc.  Allows to estimating the speed of given code before its execution  Different data structures have different efficiency on different operations  The fastest add / find / delete structure is the hash table – O(1) for all these operations 32

форум програмиране, форум уеб дизайн курсове и уроци по програмиране, уеб дизайн – безплатно програмиране за деца – безплатни курсове и уроци безплатен SEO курс - оптимизация за търсачки уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop уроци по програмиране и уеб дизайн за ученици ASP.NET MVC курс – HTML, SQL, C#,.NET, ASP.NET MVC безплатен курс "Разработка на софтуер в cloud среда" BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране, книги – безплатно от Наков безплатен курс "Качествен програмен код" алго академия – състезателно програмиране, състезания ASP.NET курс - уеб програмиране, бази данни, C#,.NET, ASP.NET курсове и уроци по програмиране – Телерик академия курс мобилни приложения с iPhone, Android, WP7, PhoneGap free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране

1. A text file students.txt holds information about students and their courses in the following format: Using SortedDictionary print the courses in alphabetical order and for each of them prints the students ordered by family and then by name: 34 Kiril | Ivanov | C# Stefka | Nikolova | SQL Stela | Mineva | Java Milena | Petrova | C# Ivan | Grigorov | C# Ivan | Kolev | SQL C#: Ivan Grigorov, Kiril Ivanov, Milena Petrova Java: Stela Mineva SQL: Ivan Kolev, Stefka Nikolova

2. A large trade company has millions of articles, each described by barcode, vendor, title and price. Implement a data structure to store them that allows fast retrieval of all articles in given price range [x…y]. Hint: use OrderedMultiDictionary from Wintellect's Power Collections for.NET. Wintellect's Power Collections for.NET.Wintellect's Power Collections for.NET. 3. Implement a data structure PriorityQueue that provides a fast way to execute the following operations: add element; extract the smallest element. 4. Implement a class BiDictionary that allows adding triples {key1, key2, value} and fast search by key1, key2 or by both key1 and key2. Note: multiple values can be stored for given key. 35

5. A text file phones.txt holds information about people, their town and phone number: Duplicates can occur in people names, towns and phone numbers. Write a program to execute a sequence of commands from a file commands.txt :  find(name) – display all matching records by given name (first, middle, last or nickname)  find(name, town) – display all matching records by given name and town 36 Mimi Shmatkata | Plovdiv | Kireto | Varna | Daniela Ivanova Petrova | Karnobat | Bat Gancho | Sofia |

 Fundamentals of C# Programming Course  csharpfundamentals.telerik.com csharpfundamentals.telerik.com  Telerik Software Academy  academy.telerik.com academy.telerik.com  Telerik Facebook  facebook.com/TelerikAcademy facebook.com/TelerikAcademy  Telerik Software Academy Forums  forums.academy.telerik.com forums.academy.telerik.com