Tuesday, 5 May 2015

Top 7 algorithms and data structures every programmer should know about

 

Top 7 Algorithms

 

 

Coming from the background of Competitive Programming and Software Development, I have compiled a list of algorithms and data structures that every programmer should know about. We will see what they do and where they are used with simplest examples. This list is prepared keeping in mind their use in competitive programming and current development practices.

1. Sort Algorithms
Sorting is the most heavily studied concept in Computer Science. Idea is to arrange the items of a list in a specific order. Though every major programming language has built-in sorting libraries, it comes in handy if you know how they work. Depending upon requirement you may want to use any of these.
  • Merge Sort
  • Quick Sort
  • Bucket Sort
  • Heap Sort
  • Counting Sort
More importantly one should know when and where to use them. Some examples where you can find direct application of sorting techniques include:
  • Sorting by price, popularity etc in e-commerce websites
  • Sorting by score in HackerEarth contest leaderboard
2. Search Algorithms
Binary Search (in linear data structures)
Binary search is used to performs a very efficient search on sorted dataset. The time complexity is O(log2N). Idea is to repeatedly divide in half the portion of the list that could contain the item, until we narrow it down to one possible item. Some applications are:
  • When you search for a name of song in a sorted list of songs, it performs binary search and string-matching to quickly return the results.
  • Used to debug in git through git bisect
Depth/Breadth First Search (in Graph data structures)
DFS and BFS are tree/graph traversing and searching data structures. We wouldn’t go deep into how DFS/BFS work but will see how they are different through following animation.
Applications:
  • Used by search engines for web-crawling
  • Used in artificial intelligence to build bots, for instance a chess bot
  • Finding shortest path between two cities in a map and many other such applications
DFS BFS example animation
3. Hashing
Hash lookup is currently the most widely used technique to find appropriate data by key or ID. We access data by its index. Previously we relied on Sorting+Binary Search to look for index whereas now we use hashing.
The data structure is referred as Hash-Map or Hash-Table or Dictionary that maps keys to values, efficiently. We can perform value lookups using keys. Idea is to use an appropriate hash function which does the key -> value mapping. Choosing a good hash function depends upon the scenario.
Applications:
  • In routers, to store IP address -> Path pair for routing mechanisms
  • To perform the check if a value already exists in a list. Linear search would be expensive. We can also use Set data structure for this operation.
4. Dynamic Programming
Dynamic programming (DP) is a method for solving a complex problem by breaking it down into simpler subproblems. We solve the subproblems, remember their results and using them we make our way to solve the complex problem, quickly.
I cannot help but quote this answer on Quora to explain DP in layman terms.
*writes down “1+1+1+1+1+1+1+1 =” on a sheet of paper* What’s that equal to?
*counting* Eight!
*writes down another “1+” on the left* What about that?
*quickly* Nine!
How’d you know it was nine so fast?
You just added one more
So you didn’t need to recount because you remembered there were eight! Dynamic Programming is just a fancy way to say ‘remembering stuff to save time later’
Applications:
  • There are many DP algorithms and applications but I’d name one and blow you away, Duckworth-Lewis method in cricket.
5. Exponentiation by squaring
Say you want to calculate 232. Normally we’d iterate 32 times and find the result. What if I told you it can be in 5 iterations?
Exponentiation by squaring or Binary exponentiation is a general method for fast computation of large positive integer powers of a number in O(log2N). Not only this, the method is also used for computation of powers of polynomials and square matrices.
Application:
  • Calculation of large powers of a number is mostly required in RSA encryption. RSA also uses modular arithmetic along with binary exponentiation.
6. String Matching and Parsing
Pattern matching/searching is one of the most important problem in Computer Science. There have been a lot of research on the topic but we’ll enlist only two basic necessities for any programmer.
KMP Algorithm (String Matching)
Knuth-Morris-Pratt algorithm is used in cases where we have to match a short pattern in a long string. For instance, when we Ctrl+F a keyword in a document, we perform pattern matching in the whole document.
Regular Expression (String Parsing)
Many a times we have to validate a string by parsing over a predefined restriction. It is heavily used in web development for URL parsing and matching.
7. Primality Testing Algorithms
There are deterministic and probabilistic ways of determining whether a given number is prime or not. We’ll see both deterministic and probabilistic (nondeterministic) ways.
Sieve of Eratosthenes (deterministic)
If we have certain limit of numbers, say determine all primes within range 100 to 1000 then Sieve is a way to go. The length of range is a crucial factor, because we have to allocate certain amount of memory according to range.
For any number n, incrementally testing upto sqrt(n) (deterministic)
In case you want to check for few numbers which are sparsely spread over a long range (say 1 to 1012), Sieve won’t be able to allocate enough memory. You can check for each number n by traversing only upto sqrt(n) and perform a divisibility check on n.
Fermat primality test and Miller–Rabin primality test (both are nondeterministic)
Both of these are compositeness tests. If a number is proved to be composite, then it sure isn’t a prime number. Miller-Rabin is a more sophisticated one than Fermat’s. Infact, Miller-Rabin also has a deterministic variant, but then its a game of trade between time complexity and accuracy of the algorithm.
Application:
  • The single most important use of prime numbers is in Cryptography. More precisely, they are used in encryption and decryption in RSA algorithm which was the very first implementation of Public Key Cryptosystems
  • Another use is in Hash functions used in Hash Tables
We’ll discuss some advanced algorithms every competitive programmer should know in the next post. Meanwhile master the above algorithms or share in the comments about what you think every beginner-intermediate programmer should know.


Wednesday, 29 April 2015


This is the true story of one remarkable man who outwitted Hitler and the Nazis to save more Jews from the gas chambers than any other during World War II.

It is the story of Oscar Schindler who surfaced from the chaos of madness, spent millions bribing and paying off the SS and eventually risked his life to rescue the Schindler-Jews. You may read the letter written by his Jews May, 1945.


Oscar Schindler rose to the highest level of humanity, walked thro
ugh the bloody mud of the Holocaust without soiling his soul, his compassion, his respect for human life -  and gave his Jews a second chance at life. He miraculously managed to do it and pulled it off by using the very same talents that made him a war profiteer - his flair for presentation, bribery, and grand gestures.


In those years, millions of Jews died in the Nazi death camps like Auschwitz, but Schindler's Jews miraculously survived.

To more than 1200 Jews Oscar Schindler was all that stood between them and death at the hands of the Nazis. A man full of flaws like the rest of us - the unlikeliest of all role models who started by earning millions as a war profiteer and ended by spending his last pfennig and risking his life to save his Jews. An ordinary man who even in the worst of circumstances did extraordinary things, matched by no one. He remained true to his Jews, the workers he referred to as my children. In the shadow of Auschwitz he kept the SS out and everyone alive.

Oscar Schindler and his wife Emilie Schindler were inspiring evidence of courage and human decency during the Holocaust. Emilie was not only a strong woman working alongside her husband but a heroine in her own right. She worked indefatigably to save the Schindler-Jews - a story to bear witness to goodness, love and compassion.


Today there are more than 7,000 descendants of the Schindler-Jews living in US and Europe, many in Israel. Before the Second World War, the Jewish population of Poland was 3.5 million. Today there are between 3,000 and 4,000 left.

Oscar Schindler spent millions to protect and save his Jews, everything he possessed. He died penniless. But he earned the everlasting gratitude of the Schindler-Jews. Today his name is known as a household word for courage in a world of brutality - a hero who saved hundreds of Jews from Hitler's gas chambers.

Schindler died in Hildesheim in Germany October 9, 1974. He wanted to be buried in Jerusalem. As he said: My children are here ..

தூய்மை இந்தியா: துடைப்பத்தோடு போபாலுக்குப் போங்களேன் மோடி!

தர பிரதமர்களைவிடத் தன்னை வித்தியாசமானவராகக் காட்டிக் கொள்ளும் கோமாளித்தனத்தோடு “தூய்மை இந்தியா” எனும் விளம்பர வித்தையை ஆரவாரத்துடன் நடத்துகிறார் மோடி. அழுக்கும் அசுத்தமும் தாழ்த்தப்பட்டோரின் சேரிப் பகுதியில்தான் இருக்கிறது என்று வக்கிரமாகக் காட்டும் வகையில், காந்தி பிறந்தநாளன்று டெல்லியிலுள்ள தாழ்த்தப்பட்ட வால்மீகி சாதியினர் நிறைந்துள்ள சேரிப்பகுதிக்கு வந்து தெருக்கூட்டுவதைப் போல புகைப்படம் எடுத்துக் கொண்டு, பாரத் சுவட்ச் அபியான் எனப்படும் தூய்மை இந்தியா திட்டத்தைத் தொடங்கிவைத்த அவர், இதனை 2019-ம் ஆண்டுக்குள் நிறைவேற்றிக் காட்ட வேண்டும் என்கிறார். இதற்காக சச்சின் டெண்டுல்கர், அம்பானி, சல்மான்கான், கமல்ஹாசன் மற்றும் நடிகைகள், பிரமுகர்கள் என ஒன்பது பேரைத் தெரிவு செய்து தூய்மை இந்தியாவை உருவாக்கும் பணியில் இணைய அவர் அழைப்பு விடுத்துள்ளார்.
மோடி தூய்மை இந்தியா
ஒரு நாடகம் நடக்குது நாட்டிலே…
மல்டி லெவல் மார்க்கெட்டிங் போல இவர்கள் மேலும் 9 பேருக்கு அழைப்பு விடுக்க, அப்படியே அது பல மடங்காகப் பெருகி நாடெங்கும் விரிவடையுமாம். இத்திட்டம் அறிவிக்கப்பட்டதும், திடீரென அரசு அலுவலக வளாகங்கள் தூய்மைப்படுத்தப்பட்டு, ஊடகங்களின் ஒளிவட்டத்தில் குத்துச் சண்டை வீராங்கனை மேரி கோம், டென்னிஸ் வீராங்கனை சானியா மிர்சா, காங்கிரசின் சசிதரூர், பா.ஜ.க. அமைச்சர்கள் மற்றும் ஆம் ஆத்மி பிரமுகர்கள் – என எல்லோரும் கையிலே துடப்பத்தை ஏந்திக் கொண்டு தெருக்கூட்டும் விளம்பர நாடகத்தை அரங்கேற்றி வருகின்றனர்.
சாமானிய மக்கள் தெருக்களில் கொட்டும் குப்பைகளைவிட, நாட்டின் தூய்மையையும் சுற்றுச்சூழலையும் நாசமாக்கிவருவது உள்நாட்டு, வெளிநாட்டு கார்ப்பரேட்  நிறுவனங்கள்தான். மறுசுழற்சி செய்ய இந்தியாவில் செலவு குறைவு என்பதால், ஏகாதிபத்திய நாடுகளிலிருந்து குப்பைகளும் நச்சுக் கழிவுகளும் பெருமளவில் இங்கே கொட்டப்பட்டு வருகின்றன. டெல்லியில் மட்டும் ஏறத்தாழ 30,000 டன் அளவுக்கும், நாடு முழுவதும் 13 லட்சம் டன் அளவுக்கும்  உள்நாட்டு, வெளிநாட்டு கார்ப்பரேட் நிறுவனங்களால் உருவான மின்னணுக் கழிவுகள் குவிந்து கிடக்கின்றன.
காடுகளையும் ஆறுகளையும் மலைகளையும் அழித்தும், ஆற்றுநீரையும் நிலத்தடி நீரையும் வரைமுறையின்றி உறிஞ்சியும், நச்சுக் கழிவுகளைக் கொட்டி சுற்றுச்சூழலை நாசமாக்கியும் வரும் கார்ப்பரேட் நிறுவனங்களால் இந்தியாவின் 13 நகரங்கள் மிக மோசமாக மாசடைந்துள்ளன. 150 ஆறுகளில் 76 ஆறுகள் கழிவுநீர் கால்வாய்களாக மாறிவிட்டன. விஷவாயுக் கொலைகார யூனியன் கார்பைடு நிறுவனத்தின் கழிவுகளால் போபால் நகரமே வாழத் தகுதியற்றதாகி விட்டது. தொழிற்சாலைக் கழிவுகளால் நாசமாக்கப்பட்டுள்ள குஜராத்தின் வாபி நகரம் மட்டுமின்றி, கப்பல் உடைக்கும் தொழில் நடக்கும் குஜராத்தின் அலாங் துறைமுகத்தில் ஆயிரக்கணக்கான டன்கள் அளவுக்கு நச்சுக் கழிவுகள் குவிந்து ஆண்டுக்குச் சராசரியாக 60 பேர் கொல்லப்பட்டு வருகின்றனர். அங்கெல்லாம் தூய்மைப்படுத்த முன்வராத கார்ப்பரேட் அடியாளான மோடி, தெருக் குப்பைகளை அகற்றுவதையே தூய்மை என்று பித்தலாட்டம் செய்கிறார்.
இந்தியாவின் தொழில் வளர்ச்சிக்கு முட்டுக் கட்டையாக இருப்பது சுற்றுச்சூழல் அமைச்சகத்தின் விதிகள்தான் என்று சாடிவரும் மோடி, கார்ப்பரேட் நிறுவனங்களின் திட்டங்களுக்குப் பாதிப்பு வந்துவிடக் கூடாது என்பதற்காகவே காடுகளை மதிப்பிடுவதற்கான அளவுகோல்களை மாற்றியமைக்கவும், காடுகளைத் தமது வாழ்வாதரமாகக் கொண்டுள்ள பழங்குடி மக்களது கிராமச் சபைகளின் கருத்து கேட்டு ஆலைகள் தொடங்கப்பட வேண்டுமென்ற விதியை ரத்து செய்யவும், தேசிய பசுமைத் தீர்ப்பாயத்தை முடமாக்கியும் பெயரளவில் நீடித்துவரும் சுற்றுச்சூழல் மற்றும் மாசுக்கட்டுப்பாடு சட்டங்களின் முதுகெலும்பை முறிக்கக் கிளம்பியிருக்கிறார். இந்த அயோக்கியத்தனங்களை மூடிமறைக்கவே தூய்மை இந்தியா போன்ற அற்பத்தனமான கூத்துக்கள் அரங்கேற்றப்படுகின்றன.

கூகுள் ப்ளே ஸ்டோரில் கிடைக்கும் பயனுள்ள இலவச தமிழ் அப்ளிகேஷன்கள்

 

கூகுள் ப்ளே ஸ்டோரில் பல அப்ளிகேஷன்கள் இலவசமாக கிடைக்கின்றது. பொழுதுபோக்கு, விளையாட்டு, செய்தி, என ஆன்டிராய்டு இயங்குதளத்தில் பல அம்சங்களுக்கும் செயலிகள் கிடைக்கின்றது. இங்கும் சில ஆன்டிராய்டு செயலிகளின் பட்டியலை தான் பார்க்க இருக்கின்றீர்கள். இங்கு தொகுக்கப்பட்டிருக்கும் செயலிகள் அனைவருக்கும் உபயோகமானதாக இருக்கும் என்பதோடு இவை கூகுள் ப்ளே ஸ்டோரில் இலவசமாக கிடைக்கின்றது என்பதும் குறிப்பிடத்தக்கது. கீழ் வரும் ஸ்லைடர்களில் கூகுள் ப்ளே ஸ்டோரில் இலவசமாக கிடைக்கும் பயனுள்ள செயலிகளின் பட்டியலை பாருங்கள்.. தமிழ் காலன்டர் 1/10 தமிழ் காலன்டர் தமிழ் மாதங்களின் தினசரி நாள்காட்டியாக இந்த செயலி இருக்கும்.


 

கருப்பு பணம் பதுக்கலில் 'ஏழை நாடான' 
இந்தியாவுக்கு 16வது இடமாம்!

                  டெல்லி: ஸ்விஸ் வங்கியில் கருப்பு பணம் பதுக்கியதில் 'ஏழை நாடான' இந்தியாவுக்கு 16 வது இடம் கிடைத்துள்ளது ஆச்சரியப்பட வைக்கிறது. ஸ்விஸ் வங்கியில் பணம் பதுங்கிய 628 இந்தியர்கள் பெயர்கள் ஏற்கனவே லீக் ஆகியிருந்த நிலையில், மொத்தமுள்ள 1195 இந்தியர்கள் பெயரும் இன்று லீக் ஆகியது. மொத்தம் 200 நாடுகளை சேர்ந்தவர்கள் சுவிட்சர்லாந்தில், கருப்பு பணம் பதுக்கி வைத்துள்ள நிலையில், இவர்கள் பதுக்கியுள்ள பண மதிப்பின் அடிப்படையில், கருப்பு பண சேமிப்பில் இந்தியாவுக்கு 16வது இடம் கிடைத்துள்ளது. Black money: Indians rank 16th on leaked HSBC list; Swiss on top கருப்பு பணம் வைத்துள்ளோருக்கான முதலிடத்தை சுவிட்சர்லாந்துதான் பெற்றுள்ளது. அந்த நாட்டை சேர்ந்தவர்கள் 31.2 பில்லியன் அமெரிக்க டாலர் மதிப்புக்கு கருப்பு பணத்தை பதுக்கியுள்ளனர். 2வது இடம் ஒருங்கிணைந்த ஐரோப்பாவுக்கு. 21.7 பில்லியன் டாலர் மதிப்புக்கு அந்த நாட்டவர்கள் கருப்பு பணம் பதுக்கியுள்ளனர். இந்த பட்டியலில் வெனிசுலா 14.8 பில்லியன் டாலர் பணத்துடன் 3வது இடத்திலுள்ளது. 13.4 பில்லியன் டாலர்களுடன் அமெரிக்கா நான்காவது இடத்திலும், 12.5 பில்லியன் டாலர்களுடன் பிரான்ஸ் 5வது இடத்திலும் உள்ளது. 4.1 பில்லியன் டாலர் மதிப்புள்ள பணத்துடன் இந்தியா இந்த பட்டியலில் 16வது இடத்திலுள்ளது. மொத்தம் 1195 இந்தியர்கள், 1668 அக்கவுண்டுகளை வைத்துள்ளதாக கூறப்படுகிறது. அதாவது சில இந்தியர்கள் ஒன்றுக்கும் மேற்பட்ட அக்கவுண்டுகளை வைத்துள்ளனர்.