Basically, Anagrams are like permutation of string.E.g stack
,sackt
,stakc
all are anagrams of stack
(thought above words aren't meaningful). Anyways you could have understood what I basically meant.
Now, I want a list of anagrams
given million words or simply say from a dictionary.
My basic question is Find total number of unique anagrams in a dictionary?
Sorting and comparing won't work as it's time complexity is pretty bad.
I thought of using hash table, string as key.
But the problem is what should be the hash function ? It would be helpful if some pseudocode provided. Some other approaches better than mentioned approaches would also be helpful.
Thanks.
A simple method is to create a Hash Table. Calculate the hash value of each word in such a way that all anagrams have the same hash value. Populate the Hash Table with these hash values. Finally, print those words together with the same hash values.
The obvious solution is to map each character to a prime number and multiply the prime numbers. So if 'a'' -> 2 and 'b' -> 3, then
To minimise the chance of overflow, the smallest primes could be assigned to the more frequent letters (e,t,i,a,n). Note: The 26th prime is 101.
UPDATE: an implementation can be found here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With