Mad_Man

Mad_Man
Рейтинг
162
Регистрация
10.11.2008
Интересы
Рыбалка
Born USSR
DenisVS:
Ноль в кавычки попробуйте…
Что-то я подзабыл синтаксис.

С нулём всё ок, обратите внимание на кусок сорца от ТС:


function check_dnsbl($mode, $ip = false)return false
{
return 0;

Он же впёр после объявления функции "return false" в пустоту.

iqmaker:
Ilekor, ну так пробовали упорядочить массив способом, которым я попросил?

А что он сортировать будет? У него поля сигнатур - это хэши изображений в виде строки, а схожесть определяется внешней либой при сравнении хэшей попарно. Результат сравнения - значение вероятности от 0 до 1 включительно с обеих сторон. А вы и вовсе разность рандомных чисел с 10 зачем-то сравниваете :-\

Ilekor:
Вот как делаю я! Но проц не выдерживает, вот я и ищу способ это оптимизировать.

По таймауту вылетает? Если поставить таймаут в 5 минут выполнения, то сколько элементов из ваших 100000 успевает перебрать цикл?

Ilekor:
Mad_Man, в базе хранится буквеный код изображения, состоящий из 150 символов, который вычисляет библиотека libpuzzle, чем к примеру эти 150 символов отличаются от к примеру 150 символов описания товара?

И к чему вы это написали?

Дикий пионер:
Почему вы придумали какую-то формулу и спрашиваете меня, верна ли она?
Моя логика такая при условии func(a,b)==func(b,a)
Для первого элемента делается N-1 сравнение, для последнего элемента сравнений нет. Для второго элемента - N-2 сравнений, для предпоследнего - одно. Получается, что для двух элементов в сумме N-1 сравнение. В среднем для каждого получается (N-1)/2. - вот и в два раза меньше.
Где я не прав?

Теперь понял о чём вы. Вы гасите квадратичный рост сложности вычислений пропуская самого себя и попарно проверенные элементы. К сожалению топикстарер вернётся к той же неоптимизированной сложности, от которой страдает в данный момент, уже через 40% элементов (140к сигнатур изображений).

Самый быстрый для последующей выборки вариант - кэш вычислений, который будет расти с каждым новым добавленным элементом, перекладывая постоянные затраты проца на хард, делая расчёты сходства только единожды - при добавлении изображения:

Шаг #1. Изображений в базе: 0, добавляем новое, считать пока нечего.

Шаг #2. Изображений в базе: 1, добавляем новое, считаем показатели схожести для нового и старого.

Шаг #3. Изображений в базе: 2, добавляем новое, считаем показатели схожести для нового и всех старых.

...

Шаг #N. Изображений в базе: N - 1, добавляем новое, считаем показатели схожести себя с предыдущими.

Выборка схожих в дальнейшем станет намного проще и быстрее.

Ilekor:
Я пытался сделать это через AJAX, но мои познаний в JS очень минимальные и поэтому не смог представить как это реализовать.

Это вообще без комментариев.

iqmaker:
задача найти группы разность между элементами которых не более 10

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


puzzle_vector_normalized_distance - compute comparable signatures of bitmap images.


Comparing Vectors

In order to check whether two pictures are similar, you need to compare their PuzzleCvec signatures, using puzzle_vector_normalized_distance()

That function returns a distance, between 0.0 and 1.0. The lesser, the nearer.

Ни структуры таблиц, ни примера данных для теста. Нихрена нету.

На текущий момент юмор заключается в том, что логика работы у ТС построена на запихивании в БД изображений с полной выгрузкой всей этой дряни оттуда каждый раз и в довесок идёт попарное постоянное сравнивание всех значений через внешнюю либу. Сложность вычислений близка к N^2 и упростить не выйдет, по крайней мере пока юзается блэкбокс в виде puzzle_vector_normalized_distance() всего на одно сравнение за раз. По теории алгоритмов попарное сравнение быстрее N * ln(N) и вовсе быть не может, читайте матчасть.

iqmaker:
получится сложность: (сложность сортировки + N) * время расчета расстояния

При оценке сложности алгоритма играет роль только количество атомарных итераций над элементами. Реальное время выполнения всего этого месива считается отдельно.

Дикий пионер:
Вам как минимум можно не сравнивать одни и те же значения, ведь если изображение 1 похоже на изображени 2, то и обратное верно? Получится проверок в два раза меньше.

Дорогой мой, а давно (N - 1)^2 = N^2 / 2?

White Wolf:
судя по отзывам защита плевая

Меня определённо забавляют дилетанты, которые ни на сантиметр в предмете обсуждения не секут, но мнение имеют. Код будет дырявый настолько, насколько криворукого разраба вы себе найдёте.

Hixon10:
P.S. Советую выбирать какую-нибудь серьезную технологию. Например, java ee, spring, asp.net mvc.

В список невероятно медленного гумна забыли добавить ещё Hibernate.

kosmet:
Кстати, кто по опытнее, какие песни из русских, желательно роковых вы знаете на вот это ритм? который на три считается как я понял

Рок и метал - это электруха + комбарь, а не груша. Без понятия что вы на своём нейлоне собрались играть пальчиками.

Всего: 4397