Прежде всего, измерьте, прежде чем проводить оптимизацию.
Вам действительно нужно оптимизировать этот поиск?
Если так, то, во-вторых, сначала подумайте об алгоритмической сложности. Например. можно ли использовать дерево (например, std::map
) вместо массива? Если это так, то это зависит от относительной частоты вставок / удалений по сравнению с поисками, но предпосылка наличия отсортированного массива под рукой указывает на то, что поиски выполняются часто по сравнению с изменениями набора данных, поэтому было бы разумно проделать небольшую дополнительную работу для вставки / удаления, что значительно ускоряет каждый поиск, а именно логарифмическое время.
Если вы обнаружите, что время поиска действительно является узким местом, требующим решения, и нет, изменение представления данных невозможно, а список короткий, то линейный поиск, как правило, будет быстрее, поскольку он требует меньше работы на сравнение.
В противном случае, если список длиннее, и никакое конкретное распределение значений не известно или не предполагается, и значения не могут рассматриваться как числовые, а потребление памяти должно быть постоянным (например, исключая создание хэш-таблицы), тогда двоичный поиск дает 1 бит информации за одно сравнение и, вероятно, это лучшее, что вы можете сделать для первого поиска.
Ура & hth.
person
Cheers and hth. - Alf
schedule
30.10.2010