LINUX.ORG.RU

алгоритм нахождения присутствия 2-ух или более заданных значений в массиве


0

0

например есть 2 массива

@a=(1,2,3,4); и @b=(3,2);

как определить присутствуют ли в массиве 'a' элементы массива 'b'

нужно алгоритм не именно для нахождения присутствия двух значений а возможно 3-х ,4-х и более

аглоритм по нахождению присутствия 1-ого значения можно реализовать без труда

а вот как сделать такое....

заранее спасибо

anonymous

predlagaju sortirovat ob arrays(po vosrastaniju). stavish oba pointera na natcalo, poka element pod pointer 1 menshe elementa pod pointer 2 dvigai pointer 1 vpered. esli element pod pointer 1 = element pod pointer 2 dvigai oba vpered. esli element pod pointer 1 bolse element pod pointer 2 , togda element pointera 2 ne naiden v array 1.

esli dosel do konza v 2 to togda vse najdeni, esli 1 dosel do konza a 2 net to togda est ne najdenije elementi.

obsaja slosnost so quicksortom: n*log(n) + n = O(n*logn) Roman

anonymous
()
Ответ на: комментарий от anonymous

ну ты чем думаешь? если у тебя n=256, а проверить надо на 2 значения, проще один раз пройти и 2n сравнений сделать, а не n log n.
а сортировка на месте если массив меньше мегабайта это вообще глупо. ибо в кеш процессора как раз столько влезает.

vasilin
()
Ответ на: комментарий от vasilin

Вопрос поставлен некорректно. Надо было сказать примерный объём данных и примерное количество заданных значений.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

@array = (23,54,2,101,80); @to_find = (23,8);

$ar_found = 1;

for ($i_f=0; ($i_f <= $#to_find) && $ar_found; $i_f++) { $el_found=0;

foreach $e_ar (@array) { if ($to_find[$i_f] == $e_ar) { $el_found = 1; } } $ar_found = $ar_found && $el_found; }

return $ar_found; }

------------ хех да ладн вот самому пришлось придумывать почти говово функции передаються 2 ссылки на 2 массива один в котором проверяем другой в котором то что должно присутствовать в первом

anonymous
()
Ответ на: комментарий от vasilin

i voobse cislo snatsenii v array 1 i v array 2 variiruetsa, to est esli proverjat dlja kajdogo snatsenija is array2 to togda polutses O(N**N)!

sleon
()

Это называется пересечение 2-х множеств :-)

Если тупо - берешь последовательно элементы из a и смотришь не встнчаются ли они в b. Получается m*n операций.

Если изящнее - вариантов многажды много, нужно смотреть на размеры массивов, повторяемость и т.д... напрример моно загнать в rb-tree второй массив, тады будет m*log n операций...

моно отсортировать оба массива и рабоать с их итераторами, примерно как это выше предлагалось.

AIv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.