Binsearch в клеточном матриксе в Matlab

У меня есть ячейка матрицы с 2 строками - отсортированный массив ячеек разных строк и массив чисел. Также у меня есть пример строки. Гарантируется, что эта строка появится в 1-й строке массива ячеек. Я хочу получить индекс появления примера в массиве ячеек строк.

Есть ли какая-либо функция в Matlab, которая обеспечивает решение с логарифмической сложностью (что-то вроде бинарного поиска)?

1 ответ

Если вы посмотрите на ismember код (тип open ismember), вы увидите, что это в принципе

  1. Проверяет, отсортирован ли массив (вызывая issorted);
  2. Если нет, он сортирует массив;
  3. Затем применяется бинарный поиск.

Таким образом, вы можете напрямую использовать ismember,

Пример:

>> strings = {'a', 'aa', 'be', 'day', 'yes'};
>> [tf, loc ] = ismember('day', strings);
>> loc
loc =
     4

Или возможно изменить ismember (сохраните его под другим именем), чтобы пропустить шаг 1, поскольку вы уже знаете, что ваш массив отсортирован.

Другие вопросы по тегам