Вопрос задан 10.01.2020 в 22:59. Предмет Информатика. Спрашивает Назарова Евгения.

На питоне!!! СрочноРеализуйте алгоритм приближенного бинарного поиска.Входные данныеВ первой строке

входных данных содержатся числа N и K. Во второй строке задаются N чисел первого массива, отсортированного по неубыванию, а в третьей строке – K чисел второго массива. Каждое число в обоих массивах по модулю не превосходит 2109.Выходные данныеДля каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько, выведите меньшее из них.Примерывходные данные5 51 3 5 7 9 2 4 8 1 6 выходные данные13715
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Terehova Sofia.

Просто прогоняем бинарный поиск дважды, сначала ищем ближайшее число, не большее нужного, потом не меньшее. Для того, чтобы такие числа были, можно дописать в массив очень большое число и очень маленькое. Затем выбираем из этих двух найденных чисел то, что будет ближе.

Пример реализации:

def bin_search(arr, target, kind="<="):

   assert kind in ["<=", ">="]

   if kind == "<=":

       comp = lambda a, b: a <= b

   else:

       comp = lambda a, b: a < b

   l = 0

   r = len(a) - 1

   while l < r - 1:

       m = (l + r) // 2

       if comp(a[m], target):

           l = m

       else:

           r = m

   if kind == "<=":

       return arr[l]

   else:

       return arr[r]

def nearest(arr, target):

   nearest_le = bin_search(arr, target, "<=")

   nearest_ge = bin_search(arr, target, ">=")

   if nearest_ge - target < target - nearest_le:

       return nearest_ge

   else:

       return nearest_le

_ = input()

a = [int(x) for x in input().split()]

a = [float("-Infinity")] + a + [float("+Infinity")]

for target in map(int, input().split()):

   print(nearest(a, target))

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Для решения данной задачи можно использовать алгоритм приближенного бинарного поиска.

Сначала необходимо считать входные данные. В первой строке содержатся числа N и K - количество элементов в первом массиве и количество элементов во втором массиве соответственно. Во второй строке задаются N чисел первого массива, отсортированного по неубыванию. В третьей строке задаются K чисел второго массива.

Далее, для каждого числа из второго массива, необходимо найти наиболее близкое число в первом массиве. Для этого можно использовать приближенный бинарный поиск.

Алгоритм приближенного бинарного поиска работает следующим образом: 1. Инициализируем переменные left и right, которые будут представлять левую и правую границы для бинарного поиска. Изначально left = 0, right = N-1. 2. Пока left <= right: - Вычисляем индекс середины массива: mid = (left + right) // 2. - Если число в массиве с индексом mid равно искомому числу, то это и есть наиболее близкое число. Возвращаем его. - Если число в массиве с индексом mid больше искомого числа, то обновляем right = mid - 1. - Если число в массиве с индексом mid меньше искомого числа, то обновляем left = mid + 1. 3. Если после цикла left > right, то наиболее близкое число будет находиться в массиве с индексом right.

Применяя данный алгоритм для каждого числа из второго массива, можно найти наиболее близкое число в первом массиве и вывести его.

Пример реализации на языке Python:

```python def binary_search(arr, target): left = 0 right = len(arr) - 1

while left <= right: mid = (left + right) // 2

if arr[mid] == target: return arr[mid] elif arr[mid] < target: left = mid + 1 else: right = mid - 1

return arr[right]

# Считываем входные данные N, K = map(int, input().split()) arr1 = list(map(int, input().split())) arr2 = list(map(int, input().split()))

# Для каждого числа из второго массива находим наиболее близкое число в первом массиве for num in arr2: closest_num = binary_search(arr1, num) print(closest_num) ```

В данном примере мы считываем входные данные, затем для каждого числа из второго массива находим наиболее близкое число в первом массиве с помощью функции `binary_search` и выводим его.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос