Какие числа меняются местами из отсортированного массива

У меня есть массив отсортированных целых чисел. Мы можем использовать бинарный поиск, чтобы найти элемент. Теперь, если один элемент отсортированного массива заменен другим элементом. Как лучше всего найти замененный элемент?


person MishraJi    schedule 25.09.2014    source источник
comment
по сути, вы выполняете бинарный поиск и находите, какой элемент отправил вас не в ту сторону.   -  person nem035    schedule 25.09.2014
comment
Обходит ваш массив и сравнивает соседние элементы.   -  person talex    schedule 25.09.2014
comment
@nem с бинарным поиском вы никогда не встретите неуместный элемент. или вы могли столкнуться с ним, но не увидеть, что он неуместен.   -  person njzk2    schedule 25.09.2014
comment
Если вам нужны оба элемента, которые были переключены, начните обход массива как с начальной, так и с конечной позиции, двигаясь вперед и назад соответственно, пока не найдете элементы, которые не по порядку. Это переключаемые элементы.   -  person GriffeyDog    schedule 25.09.2014
comment
Имейте в виду, что если в массиве есть повторяющиеся элементы, в массиве может не быть заметной разницы, и найти замену будет невозможно.   -  person Shaded    schedule 25.09.2014
comment
Если есть ошибка, один элемент не отсортирован, поиск и вставка могут пойти не так. Если вы выбираете значения в некоторых индексах и выполняете бинарный поиск, у вас все еще нет гарантии, что если поиск использует неправильное значение, то некоторая средняя точка в диапазоне будет неправильным значением.   -  person Joop Eggen    schedule 25.09.2014
comment
@Shaded Это напоминает мне шутку Стивена Райта: кто-то ворвался в мой дом и заменил все точными копиями.   -  person GriffeyDog    schedule 25.09.2014


Ответы (3)


Я не уверен, что полностью понимаю вопрос, в любом случае, если вы не знаете оба элемента, и поскольку обмен не имеет «правила». кажется, вам нужно как минимум o (n), чтобы найти замененный элемент. (простым циклом).

Если вы знаете один элемент (один из пары) и хотите найти другую пару. просто бинарный поиск одной пары, которую вы знаете, вы найдете другую на его месте.

person Yousef Fadila    schedule 25.09.2014

Оказывается, единственный способ найти такой элемент — обычный линейный поиск. Вы не можете сделать быстрее, потому что вы в основном не ищете конкретный элемент, вы ищете позицию, когда какое-то свойство нарушается (в данном случае порядок). Поскольку вы не знаете ничего, что могло бы помочь вам пропустить проверку некоторых позиций, вам в основном нужно проверить их все. Так что это будет O(n) — обычный линейный поиск.

person Aivean    schedule 25.09.2014

Вам нужно выполнять линейный поиск, а время наихудшего случая является линейным. Но в лучшем случае время может быть log n.

Как только вы найдете первый смещенный элемент, вы узнаете это целое число. Следовательно, вы можете выполнить бинарный спуск, чтобы найти положение, в котором он должен быть. Таким образом, если одно из двух несоответствий произойдет раньше, вы сэкономите время.

person ControlAltDel    schedule 25.09.2014