Algorithm Fundamentals – Detailed Lecture Notes
finiDetion of an Algorithm
An algorithm is a finite, ordered sequence of well-defined instructions that solves a problem or accomplishes a task.
Metaphor: just like a recipe in cooking—each step is followed in order to obtain the desired dish.
Must terminate after a finite number of steps (guaranteed completion).
Forms the bridge where theory meets practice in computer science.
Core attributes (to be covered later under “Characteristics of an Algorithm”):
Finiteness
Definiteness / Unambiguity
Input (zero or more)
Output (at least one)
Effectiveness (each instruction basic enough to be executed exactly & in finite time)
Overview of Basic Algorithm Topics (Course Road-Map)
"Basic Algorithm" umbrella will examine:
Introduction
Analysis of an Algorithm
Methodology of Analysis
Asymptotic Notations (e.g., )
A-priori Analysis (evaluation before code is run)
Within the Introduction segment we will detail:
Algorithm Design
Problem Development Steps
Characteristics of an Algorithm (see above)
Pseudocode
How to write Pseudocode
Difference: Algorithm vs. Pseudocode
Algorithm = conceptual, language-independent solution outline.
Pseudocode = human-readable, language-neutral way of expressing that algorithm clearly.
Importance of Algorithm Analysis
In computing, multiple algorithms often solve the same problem; quality varies.
Analysis lets us compare options and choose the most efficient & effective solution.
Especially vital when dealing with large data volumes—inefficiency scales badly.
Two core evaluation dimensions:
Time Complexity – how quickly an algorithm runs (growth rate of operations).
Space Complexity – how much memory it uses.
Goal: deliver a solution that is correct and efficient.
Key Performance Metrics: Time and Space Complexity
Time Complexity
Measures algorithmic running time relative to input size .
Expressed using asymptotic notation (e.g., linear, log-linear).
Gives an upper bound on growth, independent of machine speed.
Space Complexity
Measures additional memory consumed by the algorithm versus input size.
E.g., in-place sort uses extra space, while mergesort uses .
Analytical focus ("a-priori analysis"): estimate these metrics before writing or running code.
Algorithm Design Strategies ("How Do We Build One?")
Divide & Conquer
"Chop-chop the problem." Break a large problem into smaller, manageable sub-problems → solve each → combine results.
Classic examples: mergesort, quicksort, binary search.
Benefits: parallelism potential, clearer reasoning, often yields time improvements.
Iterative Approach
Repeat a set of instructions until a condition is satisfied.
Metaphor: looping through an array to find the maximum value.
Often uses explicit loops (for/while) and mutable state.
Recursive Approach
Function calls itself on smaller input until reaching a base case.
Often mirrors divide-and-conquer conceptually.
Re-using Known Algorithms / Pattern Recognition
If a new problem resembles a solved one, adapt the proven algorithm instead of reinventing.
Saves time and leverages vetted efficiency.
Problem Development Step (Understanding the Problem)
Considered the most critical phase in any algorithmic project.
Analogy: drawing a map before the journey—without it, you risk going the wrong way.
Activities:
Clearly define the goal and desired outputs.
Gather requirements, constraints, resources, & assumptions.
Identify edge cases & success criteria.
Outcome: a solid foundation enabling an effective design; you cannot craft a good algorithm for a problem you don’t fully understand.
Common Algorithm Development Structured Process
Problem Definition – articulate what must be solved.
Analysis – study inputs, outputs, constraints, and feasibility.
Algorithm Design – choose strategy (divide-&-conquer, iterative, etc.).
Implementation – translate design into code.
Testing – verify the algorithm works on typical & edge cases.
Debugging – locate and correct defects found during tests.
Optimization – refine to improve time/space performance.
Documentation – record design decisions, complexity analysis, usage.
Maintenance – update or adapt algorithm as requirements evolve.
Real-world workflow often revisits earlier stages (e.g., optimization may reveal need for redesign).
Connections & Continuity
Builds upon foundational knowledge from CC104 (earlier course): theoretical definitions now move to actionable practice.
Relates to software engineering phases (requirements → design → code → test).
Time & space complexity link directly to hardware realities: CPU cycles, cache sizes, RAM limits.
Ethical, Philosophical & Practical Implications
Efficiency as responsibility: wasting compute cycles = wasting energy & money.
Scalability ethics: poorly chosen algorithms may exclude users on lower-resource devices.
Transparency: clear pseudocode & documentation help others audit for fairness & correctness.
Example Preview: Mini Calculator Project
Upcoming slides will illustrate the full 9-step process by designing a mini calculator.
Will cover: requirement gathering (supported operations), algorithm choice (e.g., parsing expression), implementation, testing, optimization, and documentation.