Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пересечение массивов / 3 сообщений из 3, страница 1 из 1
22.07.2015, 14:47
    #39013436
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение массивов
Парни, помогите решить задачу. Неважно на каком языке, сам алгоритм возможного решения мне непонятен:

есть n массивов с цифрами. Параметрами приходят веса для каждого из них. от 0 до 3
И вот такую грязь надо намутить:
Найти число, которое:
есть во всех массивах с весом 0 и ( хотя бы в одном с весом 1 или во всех с весом 2)
те, у которых вес 3 - не учитывать.


Признателен заранее :-)
...
Рейтинг: 0 / 0
22.07.2015, 16:08
    #39013559
MrCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение массивов
Вариант с полным перебором:
* массивы от 1 до N назовём A1..AN (array)
* ищем в каждом массиве указанное число x. Получаем битовую маску Vx (value). Её i-й бит будет равен 1, если x найден в Ai, и 0 - если не найден.
* для каждого веса k = 0..3: строим битовую маску Wk (weight). Её i-й бит будет устанавливаться, если массиву Ai назначен вес k
* переформулируем теперь задачу:
** Vx AND W0 = Vx // есть во всех массивах веса 0
** Vx AND W1 > 0 // есть хотя бы в одном с весом 1
** Vx AND W2 = Vx // есть во всех с весом 2
** (ничего не делать) // те, у которых вес 3 - не учитывать
итоговый предикат:
Код: plaintext
1.
2.
3.
 (Vx AND W0 = Vx) AND (
  (Vx AND W1 > 0) OR
  (Vx AND W2 = Vx)) 
Т.е. задача сводится к проверке предиката для всех чисел массивов. Дубликаты нужно отсеивать (т.е., пользуясь формулировкой SQL, выборка всех чисел массивов должна быть DISTINCT), а для этого массивы нужно сначала единообразно отсортировать. Обратите внимание, как ускоряется построение Vx в этом случае!
...
Рейтинг: 0 / 0
22.07.2015, 17:50
    #39013790
VanillaNInja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пересечение массивов
Спасибо вам огромное за помощь!
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пересечение массивов / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]