Binsearch в клеточном матриксе в Matlab
У меня есть ячейка матрицы с 2 строками - отсортированный массив ячеек разных строк и массив чисел. Также у меня есть пример строки. Гарантируется, что эта строка появится в 1-й строке массива ячеек. Я хочу получить индекс появления примера в массиве ячеек строк.
Есть ли какая-либо функция в Matlab, которая обеспечивает решение с логарифмической сложностью (что-то вроде бинарного поиска)?
1 ответ
Если вы посмотрите на ismember
код (тип open ismember
), вы увидите, что это в принципе
- Проверяет, отсортирован ли массив (вызывая
issorted
); - Если нет, он сортирует массив;
- Затем применяется бинарный поиск.
Таким образом, вы можете напрямую использовать ismember
,
Пример:
>> strings = {'a', 'aa', 'be', 'day', 'yes'};
>> [tf, loc ] = ismember('day', strings);
>> loc
loc =
4
Или возможно изменить ismember
(сохраните его под другим именем), чтобы пропустить шаг 1, поскольку вы уже знаете, что ваш массив отсортирован.