MurZilka Опубликовано 16 ноября, 2005 Жалоба Опубликовано 16 ноября, 2005 Всем привет. Нужна подсказка. Есть массив A[N,M] упорядоченый по возрастанию по строкам и столбцам, т.е. приблизительно так (1,2,3,4) (11,12,13,14) (21,22,23,24) (31,32,33,34) Как найти элемент массива X, если X можно сравнить не более чем с N+M элементами массива? Буду весьма признателен. Цитата
Ineu Опубликовано 20 ноября, 2005 Жалоба Опубликовано 20 ноября, 2005 Как я понял, элемент массива a[j] определяется как X = 10*i + j + 1. В таком случае, индексы определяются как: i = X/10, j = X%10 - 1. Впрочем, это слишком просто, чтобы быть правильным. Опишите подробней принцип формирования массива. Цитата
MurZilka Опубликовано 22 ноября, 2005 Автор Жалоба Опубликовано 22 ноября, 2005 попробую чуть подробней Проблема в том, что X можно сравнить не более чем с (N+M) элементами массива. т.е. нельзя перебрать все элементы, если массив a[5][5], то X можно сравнивать только 10 раз. массив упорядочен по возрастанию. Цитата
Ineu Опубликовано 22 ноября, 2005 Жалоба Опубликовано 22 ноября, 2005 Если массив целиком упорядочен, то для любого i2 >= i1, j2 >= j1 выполняется условие a[i2][j2] > a[i1][j1] (разумеется, индексы не могут быть равны одновременно). В таком случае нет необходимости сравнивать Х с каждым элементом массива, а можно в цикле по строкам сравнивать его с первым элементом строки. Очевидно, что если a[0] < X < a[i + 1][0], то искомый элемент находится в строке i. В зависимости от метода поиска количество проверок может разниться, но в любом случае оно не будет больше n. Когда строка найдена, можно проделывать ту же операцию со столбцами в найденной строке. Опять же, вне зависимости от метода проверки, для нахождения нужного элемента понадобится не более m проверок. То есть даже в худшем варианте мы вполне укладываемся в ограничения задачи. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.