CS50xHelpers» Resources

CS50x Helpers provide you with all the resources you will require to excel at CS50x.

Books


Programming in C

Author: Stephen G. Kochan
Edition: Fourth

Buy More Info

Programming in C

Programming in C

Oxford University Press

Download

Oxford C

How Computers Work

Author: Ron White
Edition: Ninth

Buy More Info

How Computers Work

The C Programming Language

Author: K and R
Second Edition

Buy More Info

K and R C

Head First C

Author: David Griffiths
First Edition

Buy More Info

Head First C

Dive into Python

Author: Mark Pilgrim
Apress

Buy Read Online

Dive into Python

Learn Python the hard way.

Author: Zed Shaw
Third Edition

Buy Read Online

Learn Python the Hard Way

Python Programming for Absolute Beginner

Author: Michael Dawson
Third Edition

Buy More Info

Python Programming for Beginners

Sams Teach Yourself Python in 24 Hours

Author: Katie Cunningham
Sams Publishing

Buy More Info

Teach Yourself Python

Python Programming for Beginners

Author: Jason Cannon

Buy More Info

Python Programming for Beginners

Python Pocket Reference

Author: Mark Lutz
Fifth Edition

Buy More Info

K and R C

The Art of building QT Apps

Author: Daniel Molkenin
No Starch Press

Buy More Info

Building QT Apps

Bash Quick Reference Manual

O Reilly

Buy More Info

Bash Quick Reference Manual

A/AS Level Physics

Author: Chris Mee
Cambridge University Press

Buy More Info

Physics Manual

Factoring integers

Author: Richard Brent

Download

Factoring integers

Math FAQ - FAQ

Download

Math FAQ - FAQ

Hunting primes

Author: Leo Corry

Download

Hunting primes

GDB Cheatsheet

Author: Doeppner

Download

GDB cheatsheet

Make and makefilles

Author: Axel Kennedal

Download

Make and makefiles

A path for Mario

Author: Bhavik B.

Download

A path for Mario

The GNU C Programming Tutorial

Author: Mark Burgess
4.1 Edition

Download

The GNU C Programming Tutorial

Algorithms in C

Author: Robert Sedgewick
Third Edition

Buy More Info

Algorithms in C

Hacker's Delight

Author: Henry S. Warren Jr.
Second Edition

Buy More Info

Hacker's Delight

The Art of Assembly Language

Author: Randall Hyde
Second Edition

Buy More Info

The Art of Assembly Language

Introduction to 80x86 Assembly Language and Computer Architecture

Author: Richard C. Detmer
Third Edition

Buy More Info

Introduction to 80x86 Assembly Language and Computer Architecture

Modern X86 Assembly Language Programming: 32-bit, 64-bit, SSE, and AVX

Author: Daniel Kusswurm
Apress

Buy More Info

Modern X86

Definitive Guide to Django: Web Development Done Right

Author: Adrian Holovaty
Third Edition

Buy More Info

Definitive Guide to Django: Web Development Done Right

Two Scoops of Django: Best Practices For Django 1.6

Author: Daniel Greenfeld
Second Edition

Buy More Info

Two Scoops of Django: Best Practices For Django 1.6

Practical Django Projects (Expert's Voice in Web Development)

Author: James Bennett
Apress

Buy More Info

Practical Django Projects

Video Tutorials


C Programming Tutorial

Author: Bucky Roberts

Open

Dive into Python

Appliance installation

Author: Dhirendra Kumar Sharma

Vimeo

Open

Appliance installation

Video Lessons by CS50x Members


Open

Dive into Python

From Wikipedia: "Computational complexity theory is a branch of the theory of computation in theoretical computer science and mathematics that focuses on classifying computational problems according to their inherent difficulty, and relating those classes to each other. A computational problem is understood to be a task that is in principle amenable to being solved by a computer, which is equivalent to stating that the problem may be solved by mechanical application of mathematical steps, such as an algorithm."

The term analysis of algorithms is used to describe approaches to the study of the performance of algorithms. A key distinction between analysis of algorithms and computational complexity theory is that the former is devoted to analyzing the amount of resources needed by a particular algorithm to solve a problem, whereas the latter asks a more general question about all possible algorithms that could be used to solve the same problem.

Big O notation is used in Computer Science to describe the performance or complexity of an algorithm. Big O specifically describes the worst-case scenario, and can be used to describe the execution time required or the space used (e.g. in memory or on disk) by an algorithm.
Anyone who’s read Programming Pearls or any other Computer Science books and doesn’t have a grounding in Mathematics will have hit a wall when they reached chapters that mention O(N log N) or other seemingly crazy syntax. Hopefully this article will help you gain an understanding of the basics of Big O and Logarithms.
A nice guide to Big O nottion is provided by Rob Bell in his paper at A beginner's guide to Big O nottion

The result of the analysis of an algorithm is usually a formula giving the amount of time, in terms of seconds, number of memory accesses, number of comparisons or some other metric, that the algorithm takes.

Upper bounds: Big-O

When comparing the running times of two algorithms, the lower order terms are unimportant when the higher order terms are different. Also unimportant are the constant coefficients of higher order terms; an algorithm that takes a time of 100n2 will still be faster than an algorithm that takes n3 for any value of n larger than 100. Since we're interested in the asymptotic behavior of the growth of the function, the constant factor can be ignored. The "big-Oh" notation tells us that a certain function will never exceed another, simpler function beyond a constant multiple and for large enough values of n. Big-Oh gives us a formal way of expressing asymptotic upper bounds, a way of bounding from above the growth of a function.

Lower bounds: Omega

Another way of grouping functions, like big-Oh, is to give an asymptotic lower bound. Given a complicated function f, we find a simple function g that, within a constant multiple and for large enough n, bounds f from below. This gives us a somewhat different family of functions.

Tight bounds: Theta

Neither big-Oh or Omega are completely satisfying; we would like a tight bound on how quickly our function grows. To say it doesn't grow any faster than something doesn't help us know how slowly it grows, and vice-versa. So we need something to give us a tigher bound; something that bounds a function from both above and below. We can combine big-Oh and Omega to give us a new set of functions, Theta. (source: Asymptotic nottopn)

In its simplest form, a logarithm answers the question: "How many of one number do we multiply to get another number?"

Example: How many 2s do we multiply to get 8?

Answer: 2 × 2 × 2 = 8, so we needed to multiply 3 of the 2s to get 8

So the logarithm is 3

We write "the number of 2s we need to multiply to get 8 is 3" as:

log2(8) = 3

The number we are multiplying is called the "base", so we can say:

"the logarithm of 8 with base 2 is 3"
or "log base 2 of 8 is 3"
or "the base-2 log of 8 is 3"

Notice we are dealing with three numbers:

the base: the number we are multiplying (a "2" in the example above)
how many times to use it in a multiplication (3 times, which is the logarithm)
The number we want to get (an "8")

A basic explaination can be found here
A more detailed and strict description is here

These are words. Can you show me a table where these values are compared?
Sure! Note that the natural logarithm has been used for the example.

n = log(n) n nlog(n) n^2 n^2log(n) n^3 e^n n^n n!
1 0.0 1 0 1 0 1 2.7 1 1
5 1.6 5 8 25 40 125 148.4 3125 120
10 2.3 10 23 100 2300 10000 22026.5 1.0x10^20 3.6x10^6
50 3.9 50 195 2500 9750 125000 5,2×10^21 8.9x10^84 3.0x10^64
100 4.6 100 460 10000 46000 1000000 2.7x10^43 1.0x10^200 9.3x10^157
200 5.3 200 1060 40000 212000 8000000 7.2x10^86 1.6x10^460 7.9x10^374
500 6.2 500 3100 250000 1550000 125000000 1.4x10^217 3.0x10^1349 1.2x10^1134
1000 6.9 1000 6900 1000000 6900000 1000000000 2.0x10^434 1.0x10^3000 4.0x10^2567
In other words, suppose that we have three distinct algorithms that perform the same task (let's say a sort, for simplicity) having respectively O(nlog(n)), O(n^2) and O(n^3) complexity. If the first algorithm needs 460 milliseconds to complete, the second would need 10 seconds, and the third would need 16 minutes and 40 seconds.

Latest CS50 NewsWe are working tirelessly to gather the most learned members in the community to help CS50 students having difficulty live, online. The service will be arranged very soon. We will be looking forward to your feedback in this regard.

CS50 is offered as CS50x through edX, a not-for-profit enterprise of its founding partners Harvard University and the Massachusetts Institute of Technology that features learning designed specifically for interactive study via the web. In other words, even if you're not a student at Harvard, you may take CS50 by registering for CS50x.

You may take CS50x at your own pace, starting and finishing anytime in 2015.

If you earn a passing grade on 9 problem sets, numbered from 0 to 8, and a final project in CS50x, you will receive an honor code certificate from HarvardX, which is the Harvard branch of edX.

The CS50 Appliance is a "virtual machine" that allows students easy access to the tools needed for the course. It equates with running a computer system inside your current one. Instructions for installation of the Appliance can be found here

No. Simply follow the instructions above to download and install the new appliance.

While not required, using the Appliance is highly recommended to make setup for the course easy and hassle-free.

Yes, but be aware that some problem sets are different this year.

Take some deep breaths and reach out to your classmates via CS50x Helpers, Facebook, Reddit, CS50 Discuss, or Twitter. Many people are willing to help you, and we don't want you to give up.

Latest CS50 NewsRequest form for subscription to Newsletter coming soon.

Latest CS50 NewsComing Soon.

“Demanding, but definitely doable. Social, but educational. A focused topic, but broadly applicable skills. CS50 is the quintessential Harvard course.”

From the CS50 website

“CS50 is exceptional for its size, its resources and the cult of personality around its charismatic leader. It is more than just a class at Harvard; it is a cultural touchstone, a lifestyle, a spectacle. This is CS50, and it’s here to stay.”

From the Harvard Crimson