Ort Braude College Logo


Electronic and Electrical Engineering Department

Site owner: Samy Zafrany


Course Program

English sylabus
Hebrew sylabus

line separator

Lecture Notes

We will be using materials from the books:
  1. Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser, Data Structures and Algorithms in Python. Wiley 2013
  2. Rance D. Necaise. Data Structures and Algorithms Using Python. Wiley, 2011
  3. Cormen T.H. et al, Introduction to Algorithm. The MIT press 2001/9, 2nd/3rd ed
The course slides are prepared during this semester and are subject to many updates and modifications, so it is not advised to print them at this early stage.

line separator


Project 1

You will be redirected to the Python web site. You will find there the project assignment, two different solutions: procedural and object oriented. We have also included the Point/Line classes program that we did in the lab.

Goto Python Course home page for materials on the Python programming language.

Project 2

You will be redirected to the Python web site. The project is NOT to be submitted. It is for you to gain experience and expertise with the Python programming language, so please try first to solve it (use the hints), before reading the solutions below.

Goto Python Course home page for materials on the Python programming language.

Project 3

Project 4

Project 5

Project 6: Graphs

Final Project: To be submitted at the last week of the semester

line separator


line separator

Tutorials and Links

  1. Algorithm Education in Python
  2. Introduction to Algorithms - MIT Open CourseWare
  3. Introduction to Algorithms 2 - MIT Open CourseWare
  4. Project Euler - A great source for Algorithmic Problems
  5. The Mighty Dictionary
  6. CS 240: Data Structures and Algorithms, James Madison University, Spring 2013 Professor Nathan Sprague
  7. 15 Sorting Algorithms in 6 Minutes (YouTube)
  8. Tim Sort

line separator


  1. C/C++ Programming Languages: Daniel Geva Web Sites
    This is the official 31616 course web site of the C/C++ programming languages (owned by Daniel Geva). Most of the Python Data Structures and algorithms are implemented in the C programiing language, and therefore we will occasinally see C programs that explain how a specific data structure was implemented, or how a specific algorithm was made to run fast by writing it in C. So if you haven't practicing C code lately, please visit this course and refresh your C skills soon!
  2. Python Programming Environment
    We will be using the Python Programming Language for many course assignments and projects

    since it is ideal for expressing algorithmic ideas just like a pseudo language and at the same time it also runs the algorithms (unlike a pseudo language which is descriptive but cannot run). The link above contains tutorials, books, and software downloads that we need for our course. Please visit this page soon to get acquainted with the Python programming language: we expect the students to be able to learn most of what we need from this language by themselves, as we will not have time to cover all the aspects of the language.
    Click here for software installation

line separator

Kernighan's Law: Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!