The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Оптимизация сравнивания 2-х массивов"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Оптимизация сравнивания 2-х массивов"
Сообщение от Evgeny emailИскать по авторуВ закладки(??) on 13-Июл-04, 06:14  (MSK)
Можно ли как-нибудь оптимизировать сравнивание 2-х массивов, т.е. получить новый массив с эл-ми из 1 массива которых нет во 2-ом, и наоборот.
Есть два списка, в каждом 25000 элементов.
Единственный вариант который я увидел:

$max_array_1=@array_1;
$max_array_2=@array_2;
for ($i=0;$i < $max_array_1;$i++){
for (($j=0;$j < $max_array_2;$j++){
if ($array_1[$i] eq $array_2[$j]){$count_add[$i] = "1";}}
}

for ($i=0;$i < $max_array_1;$i++){
if ($count_add[$i] != 1){
push (@new, $array_1[$i]);
}
}

Есть ли какие-нибудь другие способы, может есть какая-нибудь встроенная функция?

Спасибо!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Забыл..."
Сообщение от Evgeny emailИскать по авторуВ закладки(??) on 13-Июл-04, 06:30  (MSK)
Забыл одну главную деталь...(last;)
> if ($array_1[$i] eq $array_2[$j]){$count_add[$i] = "1";last;}}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Забыл..."
Сообщение от alchie Искать по авторуВ закладки(??) on 13-Июл-04, 08:39  (MSK)
>Забыл одну главную деталь...(last;)
>> if ($array_1[$i] eq $array_2[$j]){$count_add[$i] = "1";last;}}

http://alchie.org/Dox/O'reilly/perl/cookbook/ch04_08.htm

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Забыл..."
Сообщение от Evgeny emailИскать по авторуВ закладки(??) on 13-Июл-04, 16:22  (MSK)
Спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Забыл..."
Сообщение от mirya emailИскать по авторуВ закладки on 13-Июл-04, 16:42  (MSK)
Про "эффективность": отсортируй оба quicksort (n * log n), а затем шагай по ним в стиле

for ($i = 0, $j = 0; $i != @a && $j != @b;) {
    if ($a[$i] == $b[$i]) {

}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Забыл..."
Сообщение от mirya emailИскать по авторуВ закладки on 13-Июл-04, 16:58  (MSK)
Про "эффективность": отсортируй оба quicksort (n * log n), а затем шагай по ним в стиле (что есть в одном, но нету в другом: @a и @b)

for ($i = 0, $j = 0; $i != @a && $j != @b;) {
    $i++, $j++, next if $a[$i] == $b[$i];
    $j++, push(@c, $b[$j]), next if $a[$i] > $b[$j];
    $i++, push(@c, $a[$i]);
}

push @c, splice(@a, $i) if $i != @a;
push @c, splice(@b, $j) if $j != @b;


В рез сложность n * log n + n = n * log n

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру