Category Archives: Algorithms

Topic 21 – Introduction to Computation and Programming using Python

Why do I need to learn about computation and programming using Python?

Computational thinking and Python are fundamental tools for understanding many modern theories and techniques such as artificial intelligence, machine learning, deep learning, data mining, security, digital imagine processing and natural language processing.

What can I do after finishing learning about computation and programming using Python ?

You will be prepared to learn modern theories and techniques to create modern security, machine learning, data mining, image processing or natural language processing software.

That sounds useful! What should I do now?

Please read this John V. Guttag (2013). Introduction to Computation and Programming using Python. 2nd Edition. The MIT Press book.

Alternatively, please watch
– this 6.0001 Introduction to Computer Science and Programming in Python. Fall 2016 course (Lecture Notes) and

– this MIT 6.0002 Introduction to Computational Thinking and Data Science, Fall 2016 course (Lecture Notes).

Terminology Review:

  • Big O notation.
  • Monte Carlo Simulation.
  • Random Walk.
  • K-means Clustering.
  • k-Nearest Neighbors Algorithm.

After finishing reading the book please click Topic 22 – Introduction to Machine Learning to continue.


Topic 4 – Introduction to Data Structures and Algorithms

Why do I need to learn algorithms and data structures?

Your software must solve real-world problems.
Knowing a  programming language does help you to write software but it does not help you reuse existing solutions to save your time and effort when creating a software system.

Many real world problems were already solved and their solutions were documented as data structures and algorithms.
You need to learn them so that you will not reinvent the wheel and can apply them to solve your specific problems to reduce your time and effort or to optimize your solutions.

Moreover, learning algorithms and data structures will help you practice algorithmic thinking and problem-solving skill which are essential requirements for any software developer.

What can I do after finishing learning algorithms and data structures?

You will be able to write a program to tell a computer
– to store and search for something efficiently, or
– to sort something for you, or
– to find shortest paths from one location to another, or
– to encrypt or decrypt sensitive information for you.

Given some programs, you will be able to tell which one will run faster when looking at their source code.

Given a problem, you will be able to choose appropriate data structures for representing concepts in a computer.

That sounds useful! How can I learn algorithms and data structures?

Please read this Jay Wengrow (2017). A Common-Sense Guide to Data Structures and Algorithms. Pragmatic Bookshelf first.

After that please read this Richard J. Trudeau (1994). Introduction to Graph Theory book to learn about graph theory.

After that please read this Thomas H. Cormen et al. (2022). Introduction to Algorithms. The MIT Press. book to learn in depth about algorithms and data structures.

Alternatively, please watch
– this MIT 6.006 – Introduction to Algorithms, Fall 2011 course (Lecture Notes), then watch
– this MIT 6.046J – Design and Analysis of Algorithms, Spring 2015 course (Lecture Notes).

Terminology Review:

  • Arrays.
  • Lists.
  • Linked Lists.
  • Queues.
  • Stacks.
  • Sets.
  • Hash Tables, Maps, Dictionaries.
  • Trees.
  • Binary Trees.
  • Hierarchical Structure.
  • Linear Search.
  • Big O.
  • Selection Sort.
  • Insertion Sort.
  • Quick Sort.
  • Binary Search.
  • Graphs.
  • Breadth-First Search.
  • Depth-First Search.
  • Dijkstra’s Algorithm.
  • Bellman–Ford Algorithm.
  • Recursion.
  • Dynamic Programming: Memoization, subproblems, guessing, bottom-up.

After finishing learning about data structures and algorithms please click Topic 5 – Object-Oriented Programming to continue.