Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/41: Рейтинг темы: голосов - 41, средняя оценка - 4.71
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146

Сравнение двух массивов без вложенных циклов

29.11.2016, 13:20. Показов 9709. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извиняюсь, что помещаю здесь этот вопрос, я сам по идее должен был догадаться, но никак не могу. Второй день гружусь, без толку
Имеются два массива с числами(int), одного размера, скажем, в каждом массиве по 20 чисел, больше нуля. Например:
C++
1
2
array1[20] = { 2, 5, 3, 7, 9, 6, ....}
array2[20] = { 8, 4, 1, 6, 13, 21, ....}
Дано контрольное число 8. Нужно сопоставить два массива и выявить ближайший случай, когда число из первого и число из второго массива дадут в сумме эту восьмерку.
В данном случае это будет: array1[0] + array2[3] = 8 // 2 + 6 = 8
Стандартное решение подразумевает цикл в цикле, т.е. сложность алгоритма будет N*N, если за N мы берем размер массива.
Меня попросили найти более простое решение, без вложенных циклов. Догадываюсь, что где-то в сети или в учебниках оно разжевано, но не могу найти.
Всем 10х
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.11.2016, 13:20
Ответы с готовыми решениями:

Сравнение двух массивов с удалением и дополнением
Доброго всем времени. Извиняюсь, если подобная тема уже была, поиском по форуму не нашел. Нужен наиболее оптимальный алгоритм по...

Использование вложенных циклов и ветвлений при обработке массивов Обработка матриц
Ребята, помогите пожайлуста написать 3 программы, в ПАСКАЛЕ, Очень вас прошу прямо очень срочно, заранее спасибо. Вот методичка: в ней в...

Заполнение двумерного массива без вложенных циклов
Как такое можно реализовать? Нужно каким-то образом плясать от индекса, как мне кажется, но вот как?

62
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
15.02.2022, 23:05
Студворк — интернет-сервис помощи студентам
Кладем значения одного массива в hashmap (dict).
Пробегаемся по второму массиву и проверяем наличие числа в первом (number in dict).

Никаких вложенных циклов. Сложность O(N).
Или я неправильно понял задачу?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
15.02.2022, 23:37
Цитата Сообщение от vrm2 Посмотреть сообщение
Кладем значения одного массива в hashmap (dict).
n log n
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
15.02.2022, 23:50
Цитата Сообщение от vantfiles Посмотреть сообщение
n log n
O(N), т.к. операция put занимает O(1).
https://en.wikipedia.org/wiki/Hash_table
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 00:02
Цитата Сообщение от vrm2 Посмотреть сообщение
Пробегаемся по второму массиву и проверяем наличие числа в первом
n^2
по сортированному
n log n
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 00:12
Цитата Сообщение от vantfiles Посмотреть сообщение
n^2
по сортированному
n log n
Пробегам по второму массиву - N элементов.
Для каждого ищем этот элемент во первом массиве за O(1).
Итого O(N)

Сортировать не нужно
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 00:19
Цитата Сообщение от vrm2 Посмотреть сообщение
Для каждого ищем этот элемент во первом массиве за O(1).
????????
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 00:25
Цитата Сообщение от vantfiles Посмотреть сообщение
????????
???????

Потрудитесь выражаться яснее
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 00:30
Цитата Сообщение от vantfiles Посмотреть сообщение
ищем этот элемент
то есть перебираем весь второй массив.

Добавлено через 43 секунды
Цитата Сообщение от vantfiles Посмотреть сообщение
за O(1).
да просто праздник какой-то
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 00:48
Цитата Сообщение от vantfiles Посмотреть сообщение
да просто праздник какой-то
Что удивительного? Ознакомьтесь со структурой hash map. Операция вставки и поиска в ней осуществляется за O(1).

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

1. Складываем значения из первого массива в hash map. Это занимает время O(N).
2. Затем бежим по второму массиву и смотрим, есть ли это значение в hash map (это действие занимает O(1)).
Если в hash map этот элемент есть, то мы нашли "одинаковый" элемент, содержащийся в двух массивах. Этот пункт тоже O(N)

Итого: O(N), без вложенных циклов
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 01:12
Цитата Сообщение от vrm2 Посмотреть сообщение
Затем бежим по второму массиву и смотрим, есть ли это значение в hash map
за O(1) ? то есть от размера массива ничего не зависит?

Добавлено через 11 минут
Цитата Сообщение от vrm2 Посмотреть сообщение
Операция вставки и поиска в ней осуществляется за O(1).
Это так, но Вы абсолютно не понимаете, что это значит.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 09:35
Цитата Сообщение от vantfiles Посмотреть сообщение
за O(1) ? то есть от размера массива ничего не зависит?
Да.

Цитата Сообщение от vantfiles Посмотреть сообщение
Это так, но Вы абсолютно не понимаете, что это значит
Я прекрасно понимаю, что такое O(1), O(N) и прочее Big-O

P.S. Ваши посты не конструктивны. Вы не пытаетесь обсудить задачу и ее решение.
По существу есть замечания? Если видите ошибки, укажите на них (в контексте задачи).
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 10:37
Цитата Сообщение от vrm2 Посмотреть сообщение
По существу есть замечания?
Да, есть. Покажите код на любом языке - будет что обсудить.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 10:51
Цитата Сообщение от vantfiles Посмотреть сообщение
Да, есть. Покажите код на любом языке - будет что обсудить
Python
1
2
3
4
5
def solve(arr1, arr2):
  s = set(arr1)
  for x in arr2:
    if x in s:
      print('Присутствует в обоих массивах', x)
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 10:59
я так и знал
зачем на второй итерации вы снова сравниваете элементы 2-1, если на первой уже были 1-2?
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 11:10
Цитата Сообщение от vantfiles Посмотреть сообщение
зачем на второй итерации вы снова сравниваете элементы 2-1, если на первой уже были 1-2?
Что такое 2-1 и 1-2?

Добавлено через 1 минуту
Вообще, это задача пересечения двух множеств.
set(arr1) & set(arr2)

Ее сложность O(N)
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 11:14
Цитата Сообщение от vrm2 Посмотреть сообщение
Ее сложность O(N)
у Вас n^2 в коде.
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 11:16
Цитата Сообщение от vantfiles Посмотреть сообщение
у Вас n^2 в коде.
У меня нет слов.... Попытайтесь доказать. Укажу Вам на ошибку.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
16.02.2022, 11:20
Цитата Сообщение от vrm2 Посмотреть сообщение
for x in arr2:
    if x in s:
итого n^2
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
16.02.2022, 13:24
Цитата Сообщение от vantfiles Посмотреть сообщение
итого n^2
Не очень похоже на доказательство.

P.S. Учтите, что s - множество (set)
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
17.02.2022, 02:08
Доступ к сету О(1). То есть, затраты времени линейно зависят от размера.
Более того, поиск в каком-нибудь 32-битном дереве на множестве инт32 тоже линейно зависит от размера. Его можно записать без циклов (через вложенные ифы).

Добавлено через 3 минуты
Цитата Сообщение от vantfiles Посмотреть сообщение
зачем на второй итерации вы снова сравниваете элементы 2-1, если на первой уже были 1-2?
В приведённом коде 1 и 2 вообще не сравниваются. Точнее, они могут сравниваться при некоторых условиях, но вероятность этого мала.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2022, 02:08

Вычислить сумму следующего ряда без вложенных циклов
Hе используя стандаpтные функции (за исключением abs ), вычислить сумму следующего pяда с заданной точностью Е > 0 без вложенных циклов....

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

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

Найти n-ое число Фибоначчи без массивов и циклов
Учитывая положительное число n. Найти n-е число последовательности. Вот последовательность:0 1 1 2 3 5 8 13. Программа запрещено объявлять...

Перевернуть число без помощи массивов циклов
перевернуть число без помощи массивов циклов и тд. т.е stdio.h ,если это вообще возможно?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru