Random walks

Pros: Cons:
 * Running time linear to the number of items, suitable for real-time systems (Eksombatchai et al. 2017 ). Compared to collaborative filtering whose time complexity grows (at least) linearly to the number of users/items
 * Can represent many kinds of entities/relations from heterogeneous data sources
 * Can solve different search/ranking problems using the same architecture
 * Lack of a good implementation as of 2018.
 * Spark-based implementations have trouble with random walks because of jumps across machines. They are also rather suitable for batch than not real-time.
 * SNAP is implemented in C++ making it's harder to maintain (depends on the expertise of a software team)
 * However, see tempest and plofgren/bidirectional-random-walk (Lofgren et al. 2016 ) for some scalable Java/Scala implementations (I haven't tested them yet)
 * Entry point for PPR: http://teapot-co.github.io/tempest/scaladoc/#co.teapot.tempest.server.TempestDBServer
 * Entry point for bi-directional PPR: http://teapot-co.github.io/tempest/scaladoc/#soal.ppr.BidirectionalPPREstimator
 * Not clear how it compares to collaborative filtering/bibliographic coupling and other methods?