• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Стравнение элементов двух массивов ?

  • Автор темы Stan777
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Stan777

Как органиовать быстрое стравнивание элементов двух массивов ? Имеем 2 массива, А и В как организовать быстрое сравнение элементов массивов, может перевести их Хеш, будет ли это эффективно, или простой FOR (@A) {.... FOR (.B.) {...}} будет быстрей ? Количество элементов более тысячи и элементы строки ??? Хотя Хеш тот же перебор но только элкментов хеш массива, что быстрей ? А можно передать массивы из перл-скрипта другой программе(скажем на Си) для сравния, возможны ли включения в перл-скрипты программ на Си, и передачи им целых массивов ?
 
C

ccn

Массивы упорядочены? Важен ли порядок при сравнении?
Если элементы массива упорядочены, то сравнить можно join ('%', @a) cmp join ('%', @:), где '%' -- символ заведомо не встречающийся в строках-элементах массива.
Поскольку операция сравнения достаточно трудоемкая, можно в придачу к каждому массиву хранить значение какой-нибудь хэш-функции от его элементов, например MD5. Тогда полноценное сравнение необходимо будет только для тех массивов, у которых отпечатки MD5 совпадают.
Также кое-что может зависеть от характера используемых строк. Но это уже на конкретные данные нужно смотреть.



А можно передать массивы из перл-скрипта другой программе(скажем на Си) для сравния, возможны ли включения в перл-скрипты программ на Си, и передачи им целых массивов ?

Передать конечно можно, и включать вызовы сишных функций в перл-программу можно. Но это явно не тот случай, когда такое необходимо
 
S

Stan777

Массивы упорядочены? Важен ли порядок при сравнении?
Если элементы массива упорядочены, то сравнить можно join ('%', @a) cmp join ('%', @:blink:, где '%' -- символ заведомо не встречающийся в строках-элементах массива.
Поскольку операция сравнения достаточно трудоемкая, можно в придачу к каждому массиву хранить значение какой-нибудь хэш-функции от его элементов, например MD5. Тогда полноценное сравнение необходимо будет только для тех массивов, у которых отпечатки MD5 совпадают.
Также кое-что может зависеть от характера используемых строк. Но это уже на конкретные данные нужно смотреть.
Передать конечно можно, и включать вызовы сишных функций в перл-программу можно. Но это явно не тот случай, когда такое необходимо
Нет, конечно массив не упорядочен, мне нужно сравнить каждый элемент массива @A c массивом @В, то есть каждую строку массива @А с каждой строкой массива @В, нужна вот такая сортировка массива @В.
join ('%', @a) cmp join ('%', @B) я так понимаю вы объединяете строки массива, а потом сравниваете их, мне нужнo сравнить каждую строку отдельно.
 
S

Stan777

Да все спасибо Все сделал, опять совсем по другому и опять всё работает !
типа unless exists ....
 
C

ccn

мне нужно сравнить каждый элемент массива @A c массивом @В, то есть каждую строку массива @А с каждой строкой массива @В

Если задача поставлена именно так, то, думаю,
Код:
for my $ea (@a) { for my $eb (@b) { ... }}
будет самым быстрым, но, use Benchmark чтобы определиться.

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

_serg_

народ, есть такая книжка "Perl. Сборник рецептов" (Perl Cookbook)
горячо рекомендую всем в качестве настольного справочника. 99% вопросов сразу отпадет
 
S

Stan777

да я, в этой книге и нашел ответ на этот вопрос.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!