Помимо этой информации есть эмбеддинги — то есть не сами тексты постов, а условные вектора, который характеризуют информацию из поста. Изначально все думали, что взлетит идея, которая используется в face recognition. Если взять вектора поста, который пользователи смотрят долго, и нового поста, а потом посчитать их скалярное произведение, то мы получим число, которое отражает меру их похожести. Но это была ошибка, которую допустили все участники: если две статьи похожи по контенту, это еще не означает, что пользователям они будут одинаково интересны.
Вторая задача — более интересная и трудная. Нужно было прочитать файлы с большим количеством чисел и отсортировать, либо оставить только уникальные значения. Это задача на правильную работу с памятью и машинными ресурсами.
Чисто алгоритмическая задача, нужно уметь разве, что с файлами работать.
Если уникальных чисел мало можно использовать counting sort для сортировки, да и для уникальных значений годится.
Если уникальных значений много или точно неизвестно: сортировка с помощью external sort на основе merge sort, для уникальных значений - ещё раз пробежаться по отсортированному файлу.
Можно ускорить сортировку если реализовать n way слияние на основе priority queue, а priority queue реализовать с помощью heap.
Ещё внешнюю сортировку с помощью bucket sort можно реализовать, но тут надо иметь преставление о распределении данных. Распределение можно оценить если к примеру прочитать тысячу чисел из рандомных мест файла.
Насколько помню, основная сложность задачи была в том, что оперативной памяти на машине не хватало для того, чтобы полностью прочитать файлы размером в несколько ГБ, и нужно было это учитывать при планировании вычислений.
"Честно говоря, я даже не думал, что дойду до финала!"
Так говорит почти каждый третий финалист