NUS HomeData Structures and Algorithms
Home | Intro | Data Struct | Algo | Maths | Sort | Search | Greedy | DP | Graph | Comp. Geo | Data Struct+ | Misc


Our Father which art in heaven, Hallowed by thy name. Thy kingdom come. Thy will be done in earth, as it is in heaven. Give us this day our daily bread. And forgive us our debts as we forgive our debtors. And lead us not into temptation, but deliver us from evil: For thine is the kingdom, and the power, and the glory, for ever. Amen. --- The Lord's Prayer


Update Note:
I will revise the whole content of this notes from Chapter 1 until Chapter 12 using my own wordings... I will remove or rewrite texts that I have copied from other places (e.g. USACO texts) to avoid copyright issue. I will also give illustrations and notes to help the readers in understanding the concepts. This updating project will start now (8 May 2007) and is expected to finish by end of May 2007 (delayed until end of June 2007) (delayed again until probably December 2007) (delayed again... hopefully by early late 2008 I have time to update these pages).

Updating status: suspended at the moment...

Preface

These web pages contain a collection of one branch of Computer Science curricula: the (basic) data structures and algorithms. It is true that there are many other websites out there explaining the same topic. That is why, I designed these web pages to be different from them. Rather than repeating topics that are explained in other websites (which I can simply cite), I focused the writing on motivations and applications of using certain data structure or algorithm. Thus, you will see a lot of hands-on examples rather than going through mundane theories.

I hope that you will gain something new by reading through all the material in this website.

Very Important Note:
If you want to copy anything from this website and distribute it either for profit or non profit, you need to ask my permission first and must cite this website. Thanks for your understanding :)

In case you do not know, parts of the (older) content of this website are already published in Ahmed Shamsul Arefin's book: Art of Programming Contest. Please take a look. If you need to have a printed version of the (older version) of this website, buy this book.

Target Audience (Intermediate Programmers)

The reader should have some knowledge in data structures, algorithms, and programming languages. I will be using explanations using two main programming languages, C++ (the STL), and C#. The contents in this website are not targeted for expert programmers. To gain access to newer and more sophisticated data structures or algorithms, browse the Internet for other sources.

Acknowledgements

I thanks God, for giving me some talent in algorithmic and programming skill, without that, all the stuffs that I have written here will not even exist. I also want to thanks my parents, who forced me to learn something with my new PC (at that time it was new) long long time ago, eventually I picked programming book, and since then I am interested to learn algorithm and programming. I have a lot of friends who introduced me to programming contest environment, and since then, I have participated in several contests and gained so much knowledge and experience. And to a lot others whom I can't name one by one, thanks :).

Steven Halim
Department of Computer Science
National University of Singapore
07 Aug 2008


Data Structures and Algorithms: Motivations and Applications

Table of Contents

The chapters are organized in increasing level of difficulties. Please read in order.

1. Introduction: what is algorithm?, what is data structure?, basic skills, where to practice?
2. Basic Data Structures: Array, Linked List, Stack, Queue.
3. Basic Algorithms: Brute Force, Recursion/Backtracking, Divide/Transform and Conquer,
4. Specialized Algorithm 1: Mathematical Algorithms

5. Specialized Algorithm 2: Sorting Algorithms
6. Specialized Algorithm 3: Searching Algorithms
7. Specialized Algorithm 4: Greedy Algorithms
8. Specialized Algorithm 5: Dynamic Programming Algorithms
9. Graph Data Structure and its Algorithms: DFS/BFS, MST, Single/All-Pairs Shortest Paths, Network Flows
10. Specialized Algorithm 6: Computational Geometry Algorithms
11. Advanced Data Structures: Heap, BST, Dictionary, Set, Data Structure Augmentation, Mix and Match
12. Links to Stochastic Local Search: NP-hardness, exact/complete algorithm, inexact/local searches


References

I am sure most of these books are either available in your University libraries or you can buy it through amazon.com.

1


cover

Introduction to Algorithms 2nd edition [CLRS 2001]
Introduction to Algorithms 1st edition [CLR 1990]
by: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.

I have both version of the book now :) and have read most of the chapters (~ 70%). This book is a-must-have (and read) to be a good programmer.

2

cover

The Algorithm Design Manual [ADM]
by Steven S. Skiena (website).

I already have this book, a very good book.
Also a-must-have for every good programmer.

3

cover

Programming Challenges [PC]
by Steven S. Skiena and Miguel Revilla

I also have this book. Really interesting book.
Get one copy for yourself :)

4

Introduction to the Design and Analysis of Algorithms [DAA]
by Anany Levitin

A book in design and analysis of algorithms. Have a new algorithm classification technique and use a lot of puzzles to explain concepts. Try it :).

5

Programming Pearls [PP]
by Jon Bentley

A nice programming book :), actually this book is a compilation from Bentley's writings in Communications of ACM (CACM) Newsletter.

6

cover

The Art of Computer Programming, Volumes 1-3 [ACP]
by Donald E. Knuth

Hard to understand for beginner but worth to read (quite mathematical)
Note: I don't have this book...

7

Others

Anything else related to programming. I have a long list actually, but the first few books above are already sufficient (even though most are expensive)...


This document, index.html, has been accessed 13012 times since 10-Oct-07 11:47:24 SGT. This is the 12th time it has been accessed today.

A total of 5755 different hosts have accessed this document in the last 373 days; your host, 38.103.63.60, has accessed it 2 times.

If you're interested, complete statistics for this document are also available, including breakdowns by top-level domain, host name, and date.