Are there any relatively simple to understand (and simple to implement) locality-sensitive hash examples in C/C++/Java/C#?
I'd like to learn more about the concept and so want to try an implementation on a few text files just to see how it works, so I don't need anything high-performance or anything... just an example of a hash function that returns similar hashes for similar inputs. I can learn more from it by example afterwards. :)
For strings you can use approximate matching algorithm.
- Generate a random string
- For all the strings compute their distance from that random shared string using an algorithm like http://www.dotnetperls.com/levenshtein
If the strings are equidistant from a reference string then chances are that they are similar to each other. And there you go you have a locality senitive hash implementation for strings.
You can create different hash buckets for a range of distances.
EDIT: You can try other variations of string distance. A simpler algorithm would just return no. of common characters between two strings.
Well there is an excellent into article at MSDN blogs here: http://blogs.msdn.com/b/spt/archive/2008/06/11/locality-sensitive-hashing-lsh-and-min-hash.aspx
Also there is at least once C++ library which you can inspect the source code of here: http://sourceforge.net/projects/lshkit/
There is also a Java Implementation on Hadoop. it does a good job on documents.
it's called LikeLike
Currently Likelike supports only Min-Wise independent permutations. Min-Wise independent permutations is applied to the recommendation of Google News
I realise you explicitly asked for C/C++/C#, but there is a Python port of the nilsimsa hash which might be easier to grok than other, larger libraries.
来源:https://stackoverflow.com/questions/5769949/locality-sensitive-hash-implementation