Showing posts with label English Posts. Show all posts
Showing posts with label English Posts. Show all posts
If you want to get a job in any software company, and you are ready to learn anything, then try the following items.
All about Algorithms
Algorithms forever
Note: At least 50% of the software engineers may not even heard of these algorithms.

First start with Linear data structures and algorithms.

  • Arrays
  • Linked List
  • Stack
  • Queues

Then move to basic algorithms :

  • Sorting - Merge Sort, Insertion Sort, Quick Sort, Number of inversions
  • Matrix Multiplication (just know the algorithm, if not implement it)
  • Prime Sieving
  • Modular Math including multiplication and division
  • Euclidean Algorithm for GCD, Modular Inverse, Fast Exponentiation
  • Fibonacci number with matrix multiplication
  • Probability distribution and expected value
  • Stats - Mean, Median, Variance, Bayes theorem

Then one can learn some popular algorithmic techniques:

  • Divide and Conquer - Binary Search, Maximum Subarray
  • Greedy Algorithms - Activity Selection, Huffman encoding
  • Dynamic Programming - Matrix Chain Multiplication, Knapsack,
  • Linear Programming - Variable Maximisation, Linear time sorting
  • String Algorithms - Manacher, LCS, Edit Distance

Then comes some typical non-linear data structures:


  • Trees - Binary Tree, General Tree, Lowest Common Ancestor
  • Binary Search Tree - In order Traversal, Level order traversal, finding kth largest element, diameter, depth, number of nodes, etc.
  • Heaps - Array Implementation, Heapify, Heap Sort
  • Union Find
  • Hash Table - Linear Probing, Open addressing, Collision avoidance


Then you can learn about Graphs:


  • Adjacency List, Adjacency Matrix, Weighted Edge Graphs
  • Basic Traversal algos - Breadth First Search, Depth First Search, etc
  • Shortest Path Finding Algorithm - Dijkstra, Floyd Warshal, Bellman Ford
  • Minimum Spanning Tree - Kruskal's Algorithm, Prim's Algorithm

By this time you are already pretty good with programming. You will do better than most of undergrad CS students. If you want to learn more and delve deep read more.

Advance Tree and Graph :

  • Balanced Trees - AVL, Red-Black
  • Heavy Light Decomposition, B+ Trees, Quad Tree
  • Advance Graph - Min Cut, Max Flow
  • Maximum Matching - Hall's Marriage
  • Hamiltonian Cycle
  • Edge Graphs / Line Graphs
  • Strongly Connected Components
  • Dominant Sub-Graph, Vertex Cover, Travelling Salesman - Approx algorithms

Advance String Algorithms :

  • Knuth Morris Pratt Algorithm
  • Rabin Karp Algorithm
  • Tries and Compressed Tries
  • Prefix Trees, Suffix Trees, Suffix Automation - Ukkonen Algorithm

Advance Math:

  • Fast Fourier Transformation
  • Primality Testing
  • Computational Geometry - Closest point pair, Voronoi diagram, Convex Hull.

General Advance topics :

  • Iterating through all combination / permutation
  • Bit manipulation
Well, once you know all of these, you are ready to think like an algorithm designer, welcome to the world of Algorithms :D
Well, I don't think you need any extra prerequisite other than understanding simple English and a computer with you (preferably with internet connection) to access the source codes and you can move from there.

Python Pre-requisite for Machine Learning
When I started Learning, I started with python, but I realized its so boring since I already know other languages and it doesn't need any challenges in creating the Python scripts. I also got into the puzzle of Python 2 vs Python 3. I started with Python 2 (yes old golden days, where we don't have conflict to choose version), I left it in half and I continued Python 3 in later 2018 for fixing a not working script written in python.

I finally ported those codes to C#, and created "exe" for running on Windows Machines. I don't want to create an environment with every customer to have python installed. But there is a way, where you can convert your Python codes to Windows executable. There are couple of options, Py2exe and PyInstall . Both of them are easy to do, but I personally don't recommend creating executable from python, well that's my personal preference.

Am planning to cover some of python programs in order to complete our machine learning with more clarity. You don't need to know much but at least this. Most of the scripts I have taken and modified it from Stanford University Lectures for CS228 and CS231n. 
I learnt C program and their concepts by actually writing it down on a piece of paper and then later on computer, when it comes to machine learning, most of them are concepts.

Machine Learning - Theory vs Practical

The actual piece of work can be written in a line of one or two (that's the reason we choose python). Before even debating whether theory takes priority or practical takes priority, lets focus on why we need machine learning?

People tend to write programs for everything they want computer to take care of. In technical world, this process is called automation. Anything that can be automated can be automated in IT industry. But there comes a situation, when it cannot be automated.

For example, If I give you a picture of cat and picture of dog, how do you differentiate both of them?
In order to identify the difference, you will ask lot of questions about its characteristics.

1. How big it is?
2. How is the skin?
3. Does it have legs?
4. How many legs does it have?

Can we answer with these 4 questions, the answer is NO. We need more details and we need to learn from the previous answers. Even if it is technically possible to write all the possible questions and come to conclusion, but all the efforts will be wasted if I put another picture of Mouse, and ask you to choose, what is Cat, what is Dog and what is Mouse. The problem is choosing the feasible way to teach machines to understand our thinking behavior based on previous analysis.

How a child learns?

The kids learn based on watching, listening, thinking and then uses the same pattern to analyze things. The same way, we are training the systems, we are providing guidance using algorithms to get the best output, cross verifying the results, and providing the feedback to the system. In that way, the machine increases it learns. I believe that now you might have understood, the process of making the computer to learn and think based on learning is Machine Learning.

In real world, Self Driving Cars, Personal Assistants (Alexa, Google, Cortana, Siri), Product recommendations (Amazon you might be interested in, Netflix recommended for you), Search Engine results refining (How google sends results and advertisements), Chat bots (If you message any company support, it will answer based on its learning experience), and many more. Will see one by one in detail later.

Well, the best way to learn machine learning is doing it in parallel and put more focus on the concepts. Because, once you are aware of the concepts you can implement it in any programming language you want.
Artificial Intelligence is one of the domains which is going to rule the IT field for at least some decades from now on, it could be in various forms Machine Learning, Deep Learning or whatever.

Artificial Intelligence vs Machine Learning vs Deep Learning

Machine Learning

Recently started taking various courses related to machine learning, most of them explains in a very complicated way or at least complicated to me to understand whatever they are trying to convey.

I found lot of free courses and paid courses for the same. Finally I understood what they tried to explain. Let me try to put it in a simple way.

This is my scribbles based on my understanding, it may not be true!

Before learning about I think it is always good to learn the basics about mathematics (yes, the same maths :( ), refresh the hands-on over python (Not the snake, its the programming language) along with various packages (or libraries or tools or whatever) like Numpy, Scipy, Pandas, Scikit-learn, matplotlib, pillow and others as required.

I saw lot of people uses different set of tools, languages, for their tasks. I tried using C, C++ , Matlab (yes you can perform machine in almost any language you are comfortable with) but I felt easy with the following options.

1. Windows 10 OS [was Available for free, you can even use Windows 7]
2. Microsoft Visual Studio 2019 (Yes, its working with 2017 as well) [Community Edition is free] [Alternatively you can use Visual Code as well]
3. Python and its packages [Easy to write code (very less numbers), good for beginners and its free]
When you need to critique someone, whether it's a colleague’s presentation or your child’s work of art- Always start with a compliment, then mention your critique, then end on a positive note.
Hey Charlie, what an amazing speech you just delivered, you touched down some very important facts that nobody else did. However it would have been a bit better if you would have introduced some variation in your pitch. But nevertheless it is always worthy listening to you. That ending was really smart. Well played! 
The "criticism hamburger" gets the message across but softens the blow.

The Criticism Hamburger
The Criticism Hamburger

P. S. - Works like a charm most of the time but there's no silver bullet for managing people. What works well for some will totally backfire on others.

The Cockroach Theory for Self-development  Response Vs Reaction



At a restaurant, a cockroach suddenly flew from somewhere and sat on a lady. She started screaming out of fear. With a panic stricken face and trembling voice, she started jumping, with both her hands desperately trying to get rid of the cockroach.