Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.

Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.

Like this presentation? Why not share!

- 22. Methodology of Problems Solving by Intro C# Book 45536 views
- 22. Hash Tables and Sets - C# Funda... by Telerik Software ... 5018 views
- 4. Interview for Software Engineers... by Telerik Software ... 1122 views
- 24. Algorithms Complexity and Data ... by Telerik Software ... 6920 views
- 15. Exceptions Handling - C# Fundam... by Telerik Software ... 6169 views
- Share your knowledge the Wikipedia Way by Telerik Software ... 10486 views

2,727 views

2,591 views

2,591 views

Published on

http://academy.telerik.com

This presentation talks about how to most efficiently solve problems(and not just programming ones too). You'll learn how to approach a problem, how to analyze it, how to brainstorm ideas, and how to follow through from an idea to a viable solution.

Main points:

Analyzing problems

Brainstorming ideas

Having the right mindset/approach

Managing your time in a competitive environment

Following through from idea to solution

License: CC Attribution License

No Downloads

Total views

2,727

On SlideShare

0

From Embeds

0

Number of Embeds

22

Shares

0

Downloads

126

Comments

0

Likes

8

No embeds

No notes for slide

- 1. Methodology of Problem SolvingEfficiently Solving Computer Programming ProblemsDoncho MinkovTechnical Trainerhttp://minkov.it/Telerik Software Academyacademy.telerik.com
- 2. Table of Contents1. Problem Solving2. Understanding the requirements3. Analyzing the problem4. Brainstorming5. Using Pen and Paper6. Checking your ideas 2
- 3. Problems SolvingFrom Chaotic to Methodological Approach
- 4. How to Solve Problems?1. Read and analyze the problems2. Use a sheet of paper and a pen for sketching3. Think up, invent and try ideas4. Break the problem into subproblems5. Check up your ideas6. Choose appropriate data structures7. Think about the efficiency8. Implement your algorithm step-by-step9. Thoroughly test your solution 4
- 5. Understanding the Requirements
- 6. Read and Analyze the Problems Consider you are at traditional computer programming exam or contest You have 5 problems to solve in 6 hours First read carefully all problems and try to estimate how complex each of them is Read the requirements, dont invent them! Start solving the most easy problem first Leave the most complex problem last Approach the next problem when the previous is completely solved and well tested 6
- 7. Analyzing the Problems Example: we are given 3 problems: 1. Set of Numbers Count the occurrences of a number in set of numbers 2. Students Read a set of students and print the name of the student with the highest mark 3. Binary Representation Find the ones and zeros of a set of numbers in their binary representation 7
- 8. Analyzing the Problems (2) Read carefully the problems and think a bit Order the problems from the easiest to the most complex: 1. Set of Numbers Whenever find the number increase a count variable with one 2. Students Temporary student with current highest mark 3. Binary representation If we know the ones, we can easily find the zeros 8
- 9. Using a Paper and a PenVisualizing and Sketching Your Ideas
- 10. Use a Sheet of Paper and a Pen Never start solving a problem without a sheet of paper and a pen You need to sketch your ideas Paper and pen is the best visualization tool Allows your brain to think efficiently Paper works faster than keyboard / screen Other visualization tool could also work well 10
- 11. Paper and Pen Consider the "Binary representation" problem We can sketch it to start thinking Some ideas immediately come, e.g. Divide by 2 and check for the remainder Bitwise shift right and check for the rightmost bit Bitwise shift left and check for the leftmost bit Count only the "zeros" Count only the "ones" Count both "ones" and "zeros" 11
- 12. Invent IdeasThink-up, Invent Ideas and Check Them
- 13. Think up, Invent and Try Ideas First take an example of the problem Sketch it on the sheet of paper Next try to invent some idea that works for your example Check if your idea will work for other examples Try to find a case that breaks your idea Try challenging examples and unusual cases If you find your idea incorrect, try to fix it or just invent a new idea 13
- 14. Invent and Try Ideas – Example Consider the "Binary Representation" problem Idea #1: divide by 2 and check the remainder How many times to do this? Where to check? Idea #2: Bitwiseshift and check the left/rightmost bit Left shift or right shift? How many times to repeat this? Is this fast enough? 14
- 15. Check-up Your IdeasDont go Ahead before Checking Your Ideas
- 16. Check-up Your Ideas Check-up your ideas with examples It is better to find a problem before the idea is implemented When the code is written, changing radically your ideas costs a lot of time and effort Carefully select examples for check-up Examples should be simple enough to be checked by hand in a minute Examples should be complex enough to cover the most general case, not just an isolated case 16
- 17. Invent New Idea If Needed What to do when you find your idea is not working in all cases? Try to fix your idea Sometime a small change could fix the problem Invent new idea and carefully check it Iterate It is usual that your first idea is not the best Invent ideas, check them, try various cases, find problems, fix them, invent better idea, etc. 17
- 18. Efficiency and Performance Is Your Algorithm Fast Enough?
- 19. Think About the Efficiency Think about efficiency before writing the first line of code Estimate the expected running time (e.g. using asymptotic complexity) Check the requirements Will your algorithm be fast enough to conform with them You dont want to implement your algorithm and find that it is slow when testing You will lose your time 19
- 20. Efficiency is not Always Required Best solution is sometimes just not needed Read carefully your problem statement Sometimes ugly solution could work for your requirements and it will cost you less time Example: if you need to sort n numbers, any algorithm will work when n ∈ [0..500] Implement complex algorithms only when the problem really needs them! 20
- 21. ImplementationCoding and Testing Step-by-Step
- 22. Start Coding: Check List Never start coding before you find correct idea that will meet the requirements What you will write before you invent a correct idea to solve the problem? Checklist to follow before start of coding: Ensure you understand well the requirements Ensure you have invented a good idea Ensure your idea is correct Ensure you know what data structures to use Ensure the performance will be sufficient 22
- 23. Coding Check List – Example Checklist before start of coding: Ensure you understand well the requirements Yes, counts values of bits Ensure you have invented a correct idea Yes, the idea seems correct and is tested Ensure the performance will be sufficient Linear running time good performance 23
- 24. Implement your Algorithm Step-by-Step "Step-by-step" approach is always better than "build all, then test" Implement a piece of your program and test it Then implement another piece of the program and test it Finally put together all pieces and test it Small increments (steps) reveal errors early "Big-boom" integration takes more time 24
- 25. Step #1 – Check The Value Of The First Bit Now we have the value of the first bit int number=10; int firstBit = number & 1; What happens to the number? Do we need the first bit anymore? Remove it by right shift int number=10; int firstBit = number & 1; number >>= 1; 25
- 26. Step #1 – Test Testing if the correct bit is extracted and checked Get feedback as early as possible: int number = 10; int firstBit = number & 1; number >>= 1; Console.WriteLine(firstBit); Console.WriteLine(number); The result is as expected: 0 // the first bit 5 // the number without the first bit 26
- 27. Step #2 – Get All The Bits Of a Number How many bits we want to check? All for the number But how many are they Example: the number 10 10(10) = 8 + 2 = 1010(2) – 4 bits How the find out when to stop the checking? When right shifting the zeros in the front get more and more At some point the number will become zero 27
- 28. Step #2 – Get All The Bits Of a Number Until the number becomes equal to 0 1. Check the value of the bit 2. Right shift the number while (number != 0) { int firstBit = number & 1; number >>= 1; Console.Write("{0} ", firstBit); } 28
- 29. Step #2 – Test Testing with 10 0 1 0 1 Testing with 1111 1 1 1 0 1 0 1 0 0 0 1 1111 = 1024 + 64 + 16 + 4 + 2 + 1 = 210 + 26 + 24 + 22 + 21 + 20 Seems correct 29
- 30. Step #3 – Check For The Occurrences Of Bit Value So far: We can get the values of all the bits of a number Lets count the number of ones and zeros while (number != 0) { int firstBit = number & 1; number >>= 1; if (firstBit == 1) { oneCount++; } else { zeroCount++; } } 30
- 31. Step #3 – Test Test with number 111 (1101111(2)) ones:6 zeros:1 The result is correct Test with number 1234 (10011010010(2)) ones:5 zeros:6 The result is correct 31
- 32. Step #4 – Count The Bits Of The Whole Set Pass through all the numbers Count their bits int zeroCount = 0, oneCount = 0, n = 5; for (int i = 0; i < n; i++) { int number = int.Parse(Console.ReadLine()); while (number != 0) { int firstBit = number & 1; number >>= 1; if (firstBit == 1) { oneCount++; } else { zeroCount++; } } Console.WriteLine("ones:{0};zeros:{1}", oneCount,zeroCount); } 32
- 33. Step #4 – Count The Bits Of The Whole Set (2) The result is surprisingly incorrect: Input: Output: 1 ones:1; zeros:0 2 ones:2; zeros:1 3 ones:4; zeros:1 4 ones:5; zeros:3 5 ones:7; zeros:4 The result is surprisingly incorrect: The count of ones and zeros appears as to stack for all the numbers of the set! We defined the counters outside the iteration of the set loop Put them inside 33
- 34. Step #4 – Fixing the Bug int n = 5; for (int i = 0; i < n; i++) { int zeroCount = 0, oneCount = 0; int number = int.Parse(Console.ReadLine()); while (number != 0) { int firstBit = number & 1; number >>= 1; if (firstBit == 1) { oneCount++; } else { zeroCount++; } } Console.WriteLine("ones:{0}; zeros:{1}", oneCount,zeroCount); } Now it is OK 34
- 35. TestingThoroughly Test Your Solution
- 36. Thoroughly Test your Solution Wise software engineers say that: Inventing a good idea and implementing it is half of the solution Testing is the second half of the solution Always test thoroughly your solution Invest in testing One 100% solved problem is better than 2 or 3 partially solved Testing existing problem takes less time than solving another problem from scratch 36
- 37. How to Test? Testing could not certify absence of defects It just reduces the defects rate Well tested solutions are more likely to be correct Start testing with a good representative of the general case Not a small isolated case Large and complex test, but Small enough to be easily checkable 37
- 38. How to Test? (2) Test the border cases E.g. if n ∈ [0..500] try n=0 , n=1, n=2, n=499, n=500 If a bug is found, repeat all tests after fixing it to avoid regressions Run a load test How to be sure that your algorithm is fast enough to meet the requirements? Use copy-pasting to generate large test data 38
- 39. Read the Problem Statement Read carefully the problem statement Does your solution print exactly what is expected? Does your output follow the requested format? Did you remove your debug printouts? Be sure to solve the requested problem, not the problem you think is requested! Example: "Write a program to print the number of permutations on n elements" means to print a single number, not a set of permutations! 39
- 40. Testing – Example Test with a set of 10 numbers Serious error found change the algorithm Change the algorithm The counters never reset to zero Test whether the new algorithm works Test with 1 number Test with 2 numbers Test with 0 numbers Load test with 52 000 numbers 40
- 41. Test With 10000 Numbers – Exampleint n = 10000, startNumber=111;for (int i = startNumber; i < startNumber + n; i++){ int zeroCount = 0; int oneCount = 0; //int number = int.Parse(Console.ReadLine()); int number = i; int originalNumber = number; Replace the reading from the while (number != 0) console with a easier type of check { int firstBit = number & 1; number >>= 1; if (firstBit == 1){ oneCount++; } else { zeroCount++; } }} 41
- 42. Test With 10000 Numbers – Example (2) The result is perfect: 111(10) = 1101111(2) -> ones:6;zeros:1 … 10110(10) = 10011101111110(2) -> ones:10;zeros:4 42
- 43. Testing Tips You are given the task of the binary representation The program must read from the console Integer numbers N and B N integer numbers While writing and testing the program Dont read from the console First hardcode the numbers Later make it When you are sure it works 43
- 44. Hard-Coded Input – Example// Hardcoded input data – for testing purposesint n = 5;int num1 = 11;int num2 = 127;int num3 = 0;int num4 = 255;int num5 = 24;// Read the input from the console//int n = int.Parse(Console.ReadLine());//for (int i=0; i<n; i++)//{// int num = int.Parse(Console.ReadLine());// // Process the number …// // …//}// Now count the bits for these n numbers … 44
- 45. SummaryProblems solving needs methodology: Understanding and analyzing problems Using a sheet of paper and a pen for sketching Thinking up, inventing and trying ideas Decomposing problems into subproblems Selecting appropriate data structures Thinking about the efficiency and performance Implementing step-by-step Testing the nominal case, border cases and efficiency 45
- 46. Methodology of Problem Solving курсове и уроци по програмиране, уеб дизайн – безплатно BG Coder - онлайн състезателна система - online judge курсове и уроци по програмиране – Телерик академия форум програмиране, форум уеб дизайн уроци по програмиране и уеб дизайн за ученици ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NET http://academy.telerik.com програмиране за деца – безплатни курсове и уроци ASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC безплатен SEO курс - оптимизация за търсачки алго академия – състезателно програмиране, състезаниякурсове и уроци по програмиране, книги – безплатно от Наков курс мобилни приложения с iPhone, Android, WP7, PhoneGap уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop Дончо Минков - сайт за програмиране free C# book, безплатна книга C#, книга Java, книга C# Николай Костов - блог за програмиране безплатен курс "Качествен програмен код" безплатен курс "Разработка на софтуер в cloud среда" C# курс, програмиране, безплатно
- 47. Free Trainings @ Telerik Academy Fundamentals of C# Programming Course csharpfundamentals.telerik.com Telerik Software Academy academy.telerik.com Telerik Academy @ Facebook facebook.com/TelerikAcademy Telerik Software Academy Forums forums.academy.telerik.com

No public clipboards found for this slide

×
### Save the most important slides with Clipping

Clipping is a handy way to collect and organize the most important slides from a presentation. You can keep your great finds in clipboards organized around topics.

Be the first to comment