Before jumping into maths and implementation details could you write a bit of "insider knowledge" about what kind of data this is more suitable to / what kind of structures it finds?