Это вопрос интервью, который я нашел.
Первая часть состоит в том, чтобы найти k
наиболее распространенных слов в файле. Это хорошо известный вопрос, и решение можно найти здесь . Время выполнения этого решения составляет O(nlogk + k)
, когда n
- размер файла.
Вторая часть - это поиск k
наиболее распространенных слов в файле, но на этот раз с использованием параллелизма. Это означает, что если мы можем запустить поток m
параллельно в нашей системе - как мы можем улучшить решение, описанное выше?
Вот где я застрял. Сначала я подумал о том, чтобы разделить файл на m
частей и отправить каждую часть в другой поток, чтобы он мог обработать его. Но проблема в том, что эти потоки должны будут использовать один и тот же файл, что означает, что они должны быть синхронизированы. Поэтому, даже если я получу лучшее время выполнения на бумаге, используя эти потоки m
, на самом деле я вполне уверен, что использование синхронизации сделает время выполнения хуже, чем время выполнения в приведенной выше реализации.
У вас есть идея, как реализовать это с помощью параллелизма, чтобы улучшить время выполнения?