Какой самый эффективный способ найти элементы в несортированном списке? - PullRequest
0 голосов
/ 09 февраля 2011

Учитывая несортированный список в массиве, обязательно ли потребуется хотя бы линейное время, чтобы найти число элементов меньше x?Если так, то почему?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2011

Да, вам нужно будет проверить каждое число хотя бы один раз, чтобы узнать, меньше ли оно указанного порогового значения. Если числа не отсортированы, вы ничего не можете о них сделать.

0 голосов
/ 09 февраля 2011

Если вы разрешаете неограниченное количество процессоров, вы можете решить эту проблему практически за постоянное время, предполагая, что конкатенация результатов выполняется быстро: просто разбейте массив на куски фиксированного размера и обработайте каждый блок на отдельном процессоре.

Если мы говорим об одном процессоре, я бы сказал, что вам нужно линейное время:

  • вам нужно проверить каждый элемент и, если он соответствует предикату, поместить его в результат.
  • сортировка или подобное не поможет, потому что вам снова нужно проверять каждый элемент хотя бы один раз.
0 голосов
/ 09 февраля 2011

Да, вам нужно хотя бы линейное время.Невозможно узнать, является ли элемент меньше x, не проверив его, поэтому вы должны проверить каждый элемент один раз.

Если вы сначала отсортировали его, то вы можете остановиться, как только элемент станет большех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...