# data[].attributes.attachment_link.title
CS50 2018 - Lecture 1 - Peanut Butter and Jelly

# data[].attributes.attachment_link.readable_text
NARRATION: If we want a computer to understand how to do something we need to give it an algorithm.

MOUSE: Pick up brush!

NARRATION: Algorithm sounds like a big word doesn't it?

But actually an algorithm is something very simple but important.

MOUSE: Pick up toothbrush!

NARRATION: An algorithm is a list of steps you give to computers to solve a problem or get something done.

Imagine that you need to show someone how you brush your teeth. So they can learn how to do it themselves.You would need to explain all the little steps you do, in the right order, so they can understand how to do it without getting confused.

The instructions would go like this:

1. Open the toothpaste

2. Put a bit of toothpaste on the toothbrush

3. Open your mouth

4. Brush your teeth, nicely

5. Rinse your mouth with water

6. Smile

It's important to put the right steps in the right order so you can get great results.

# data[].attributes.attachment_link.description
Learn what an algorithm is with this KS1 primary computing guide from BBC Bitesize for years 1 and 2. We will define what an algorithm is and how they work.

# data[].attributes.attachment_link.readable_text
What is Algorithm? Algorithm Basics

The word Algorithm means "a process or set of rules to be followed in calculations or other problem-solving operations". Therefore Algorithm refers to a set of rules/instructions that step-by-step define how a work is to be executed upon in order to get the expected results.

It can be understood by taking an example of cooking a new recipe. To cook a new recipe, one reads the instructions and steps and execute them one by one, in the given sequence. The result thus obtained is the new dish cooked perfectly. Similarly, algorithms help to do a task in programming to get the expected output.
The Algorithm designed are language-independent, i.e. they are just plain instructions that can be implemented in any language, and yet the output will be the same, as expected.

What are the Characteristics of an Algorithm?

As one would not follow any written instructions to cook the recipe, but only the standard one. Similarly, not all written instructions for programming is an algorithm. In order for some instructions to be an algorithm, it must have the following characteristics:

Clear and Unambiguous: Algorithm should be clear and unambiguous. Each of its steps should be clear in all aspects and must lead to only one meaning.

Well-Defined Inputs: If an algorithm says to take inputs, it should be well-defined inputs.

Well-Defined Outputs: The algorithm must clearly define what output will be yielded and it should be well-defined as well.

Finite-ness: The algorithm must be finite, i.e. it should not end up in an infinite loops or similar.

Feasible: The algorithm must be simple, generic and practical, such that it can be executed upon will the available resources. It must not contain some future technology, or anything.

Language Independent: The Algorithm designed must be language-independent, i.e. it must be just plain instructions that can be implemented in any language, and yet the output will be same, as expected.

It is easy to understand.

Algorithm is a step-wise representation of a solution to a given problem.

In Algorithm the problem is broken down into smaller pieces or steps hence, it is easier for the programmer to convert it into an actual program.

Advantages of Algorithms:

Writing an algorithm takes a long time so it is time-consuming.

Branching and Looping statements are difficult to show in Algorithms.

Disadvantages of Algorithms:

How to Design an Algorithm?

1. The problem that is to be solved by this algorithm.

2. The constraints of the problem that must be considered while solving the problem.

3. The input to be taken to solve the problem.

4. The output to be expected when the problem the is solved.

5. The solution to this problem, in the given constraints.

In order to write an algorithm, following things are needed as a pre-requisite:

Step 1: Fulfilling the pre-requisites
As discussed above, in order to write an algorithm, its pre-requisites must be fulfilled.

1. The problem that is to be solved by this algorithm: Add 3 numbers and print their sum.

2. The constraints of the problem that must be considered while solving the problem: The numbers must contain only digits and no other characters.

3. The input to be taken to solve the problem: The three numbers to be added.

4. The output to be expected when the problem the is solved: The sum of the three numbers taken as the input.

5. The solution to this problem, in the given constraints: The solution consists of adding the 3 numbers. It can be done with the help of '+' operator, or bit-wise, or any other method.

Step 2: Designing the algorithm
Now let's design the algorithm with the help of above pre-requisites:
Algorithm to add 3 numbers and print their sum:

1. START

2. Declare 3 integer variables num1, num2 and num3.

3. Take the three numbers, to be added, as inputs in variables num1, num2, and num3 respectively.

4. Declare an integer variable sum to store the resultant sum of the 3 numbers.

5. Add the 3 numbers and store the result in the variable sum.

6. Print the value of variable sum

7. END

Step 3: Testing the algorithm by implementing it.
Inorder to test the algorithm, let's implement it in C language.

Program: Output
Then the algorithm is written with the help of above parameters such that it solves the problem.
Example: Consider the example to add three numbers and print the sum.

1. Priori Analysis: "Priori" means "before". Hence Priori analysis means checking the algorithm before its implementation. In this, the algorithm is checked when it is written in the form of theoretical steps. This Efficiency of an algorithm is measured by assuming that all other factors, for example, processor speed, are constant and have no effect on the implementation. This is done usually by the algorithm designer. It is in this method, that the Algorithm Complexity is determined.

2. Posterior Analysis: "Posterior" means "after". Hence Posterior analysis means checking the algorithm after its implementation. In this, the algorithm is checked by implementing it in any programming language and executing it. This analysis helps to get the actual and real analysis report about correctness, space required, time consumed etc.

Time Factor: Time is measured by counting the number of key operations such as comparisons in the sorting algorithm.

Space Factor: Space is measured by counting the maximum memory space required by the algorithm.

1. Space Complexity: Space complexity of an algorithm refers to the amount of memory that this algorithm requires to execute and get the result. This can be for inputs, temporary operations, or outputs.
How to calculate Space Complexity?
The space complexity of an algorithm is calculated by determining following 2 components:

Fixed Part: This refers to the space that is definitely required by the algorithm. For example, input variables, output variables, program size, etc.

Variable Part: This refers to the space that can be different based on the implementation of the algorithm. For example, temporary variables, dynamic memory allocation, recursion stack space, etc.

2. Time Complexity: Time complexity of an algorithm refers to the amount of time that this algorithm requires to execute and get the result. This can be for normal operations, conditional if-else statements, loop statements, etc.
How to calculate Time Complexity?
The time complexity of an algorithm is also calculated by determining following 2 components:

Constant time part: Any instruction that is executed just once comes in this part. For example, input, output, if-else, switch, etc.

Variable Time Part: Any instruction that is executed more than once, say n times, comes in this part. For example, loops, recursion, etc.

Enter the 1st number: 0
Enter the 2nd number: 0
Enter the 3rd number: -1577141152

Sum of the 3 numbers is: -1577141152

Attention reader! Don't stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live.

# data[].attributes.attachment_link.title
Introduction to Algorithms - GeeksforGeeks

# data[].attributes.attachment_link.description
The word Algorithm means "a process or set of rules to be followed in calculations or other problem-solving operations". Therefore Algorithm refers to a set of rules/instructions that step-by-step define how a work is to be executed upon in order to get the expected results.

# data[].attributes.attachment_link.title
The One About Algorithmic Thinking in Computational Thinking

# data[].attributes.attachment_link.description
Algorithmic thinking is the process for developing processes and formulas (an algorithm). Learn how this concept can be integrated in student learning.

# data[].attributes.attachment_link.title
Algorithms and Computational Thinking | Fields of CS

# data[].attributes.attachment_link.description
Everything with computers happens because of software, and that software requires coding and algorithms to work. By learning the fundamental building blocks of algorithms and computational thinking, citizens can apply these ideas in all kinds of situations.

# data[].attributes.attachment_link.description
Discover the various types of algorithms and how they operate. Examine a few real-world examples of algorithms used in daily life.

# data[].attributes.body
Use an interactive sorting network to sort numbers by following a structured process.

# data[].attributes.attachment_link.keywords[]
sorting bubble select selection insert insertion merge random quick counting radix

# data[].attributes.attachment_link.title
VisuAlgo - Sorting (Bubble, Selection, Insertion, Merge, Quick, Counting, Radix)

# data[].attributes.attachment_link.description
Sorting is a very classic problem of reordering items that can be compared (Integers, floating-point numbers, strings, etc) of an array (or a list) in a certain order (increasing, non-decreasing, decreasing, non-increasing, lexicographical, etc).There are many different sorting algorithms, each has its own advantages and limitations.Sorting is commonly used as the introductory problem in various Computer Science classes to showcase a range of algorithmic ideas.Without loss of generality, we assume that we will sort only Integers, not necessarily distinct, in non-decreasing order in this visualization.

# data[].attributes.body
Solve puzzles by programming a robot to light up tiles using a sequence of commands.

# data[].attributes.body
Drag and drop blocks to create a sequence that navigates a character through a maze.

# data[].attributes.attachment_link.description
Maze is an introduction to loops and conditionals. It starts simply, but every level is more challenging than the last.