Перейти к содержанию

Рекомендуемые сообщения

Всем привет. Нужна подсказка. Есть массив A[N,M] упорядоченый

по возрастанию по строкам и столбцам, т.е. приблизительно так

(1,2,3,4)

(11,12,13,14)

(21,22,23,24)

(31,32,33,34)

Как найти элемент массива X, если X можно сравнить не более

чем с N+M элементами массива? Буду весьма признателен.

Ссылка на комментарий
Поделиться на другие сайты

Как я понял, элемент массива a[j] определяется как X = 10*i + j + 1. В таком случае, индексы определяются как: i = X/10, j = X%10 - 1. Впрочем, это слишком просто, чтобы быть правильным. Smile Опишите подробней принцип формирования массива.

Ссылка на комментарий
Поделиться на другие сайты

попробую чуть подробней Embarassed Проблема в том, что X можно

сравнить не более чем с (N+M) элементами массива.

т.е. нельзя перебрать все элементы, если массив a[5][5],

то X можно сравнивать только 10 раз.

массив упорядочен по возрастанию.

Ссылка на комментарий
Поделиться на другие сайты

Если массив целиком упорядочен, то для любого i2 >= i1, j2 >= j1 выполняется условие a[i2][j2] > a[i1][j1] (разумеется, индексы не могут быть равны одновременно). В таком случае нет необходимости сравнивать Х с каждым элементом массива, а можно в цикле по строкам сравнивать его с первым элементом строки. Очевидно, что если a[0] < X < a[i + 1][0], то искомый элемент находится в строке i. В зависимости от метода поиска количество проверок может разниться, но в любом случае оно не будет больше n.

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...