COEN 352 Data structures and Algorithms R. Dssouli Abu Abdullah Muhammad ibn Musa al-Khwarizmi (c. 780 -- 850 AD) Persian astronomer and mathematician lived in Baghdad, father of algebra “On calculating with hindu numerals” a treatise in Arabic, 825 “Agoritmi de numero Indorum” translation into Latin, 12th century author’s name, mistaken for a plural noun, came to mean “calculation methods” Algorithm: Etymology Al-Khwārizmī (in Arabic: ,)خوارزمیPersian astronomer and mathematician, wrote a treatise in the Arabic language in 825 AD, On Calculation with Hindu– Arabic numeral system. (See algorism). It was translated from Arabic into Latin in the 12th century as Algoritmi de numero Indorum (al-Daffa 1977), whose title is supposedly likely intended to mean "Algoritmi on the numbers of the Indians", where "Algoritmi" was the translator's rendition of the author's name; but people misunderstanding the title treated Algoritmi as a Latin plural and this led to the word "algorithm" (Latin algorismus) coming to mean "calculation method". The intrusive "th" is most likely due to a false cognate with the Greek ἀριθμός (arithmos) meaning "numbers". Source Wikipedia Why Study Data Structures? • Data structures organize Data – Good choice better program (more efficient program) – Bad choice poor program performance • Changes over time – More powerful computers – More complex applications – More complex tasks Why Study Data Structures? • Characteristics of problem’s solution – Efficiency: a solution is efficient if it solves problem within resource constraints • Time • Space – Cost: the amount of resources a solution will consume Why study Algorithms • Algorithms solve problems – Good choice more efficient program – Bad choice poor program performance • Impact – Different algorithms perform better on different inputs – Input size can affect the performance Why study algorithms? (2) • a language for talking about program behavior • standard set of algorithms and design techniques • feasibility (what can and cannot be done) • halting problem, NP-completeness • analyzing correctness and resource usage • successful companies (Google, Mapquest, Akamai) • computation is fundamental to understanding the world • cells, brains, social networks, physical systems all can be • viewed as computational devices • IT IS FUN!!! Goal • Designing “clever" algorithms to solve problems efficiently. • Analyzing algorithms. This means: – proving that they are correct. It is not part of this course. – estimating their running time and/or other resources needed (e.g., memory space). • A Abstract Data Types ADT • Basic definitions – – – – – Type: a set of objects Data item or element: a piece of information or record Member: a data item is said to be a member of a data type Simple data item: a data item containing no subparts Aggregate data item: a data item that may contain several pieces of information – Abstract data type: a type and a collection of operations to manipulate that type ADT are mathematical abstractions, an ADT only mentions what is to be done, not how. Data Structure • A data Structure is a physical implementation of an ADT – Each ADT operation is implemented by one or more subroutines – Data structures are organizations for data in the main memory Relations between notions Problem Abstract data structure Algorithms Concrete data structure Program Software library Specify Resolves /Implements Selecting a Data Structure • • • • Analyze problem Determine basic operations Select a data structure Questions – At what times(s) in the program run do inserts occur – Are deletes allowed? – Is there any Order to data processing? Algorithm/ Data Structure • Each data structure requires: – Space to store each item, including overhead – Time to perform basic operations – Programming effort • Algorithms are closely related: – Poor data structure choice higher complexity algorithms – Good data structure choice algorithm trivial Performance isn’t everything Typical goal: Find most space- and time-efficient algorithm for given problem. • What else is important? – modularity – user-friendliness – correctness – programmer time – maintainability – simplicity – functionality – extensibility – robustness – reliability Problems, Algorithms and Programs What is the difference among these? • Key questions that relate: – Can the problem be solved efficiently? – What do we mean by efficient? – Which algorithms are more efficient? – How one can answer the above questions? – How to estimate the time required for a program? – Hoe to reduce the running time of a program? – The consequences of careless use of recusion Problems • Problem: task to be performed – Can be seen as: a set of inputs and matching outputs – Problem definition includes resource constraints • Problems are analogous to mathematical functions – Function: mapping inputs (domain) to outputs (range) – The input to a function can vary: • Single number • Multiple numbers • Set of information – Parameters: the value making up an input – A given input must always map to the same output Algorithms Definition: Finite set of unambiguous instructions for solving a problem. • An algorithm is correct if on all legitimate inputs, it outputs the right answer in a finite amount of time • Can be expressed as – – – – Pseudocode flow charts text in a natural language (e.g. English) computer code Algorithms and Programs • Algorithms: a method or process to solve a problem – Algorithm transforms the input of a problem to its outputs – Algorithm proprieties 1) 2) 3) 4) 5) Must be correct It must be composed of a series of correct steps There can be no ambiguity about which step is next It must be finite in length It must terminate • Program: an instance of an algorithm, written in some programming language.