Подсказка для смельчаков, кто возьмется за тестовые (надеюсь Геннадий не посчитает это читом):
1) там где быстро нужно найти по запросу нечто в очень большой коллекции, часто могут помочь методы approximate nearest neighbors (что интересно, один из популярных сейчас методов был опубликован сравнительно недавно, т.е. меньше чем 5 лет назад)
2) если будете реализовывать EM-алгоритм, обязательно протестируйте, что функция потерь (т.е. negative log likelihood) *не возрастает* с каждой итерацией. Это его теоретическое свойство.