Вместо функции strcasecmp, вам надо подставить библиотечную функцию, возвращающую расстояние между картинками.
После этого взять проход, который я привел в самом начале, в котором группируются элементы, где вместо abs будет использоваться опять таки функция определения расстояния.
ну так напишите, что не понимаете, полагаете лучше игнорировать?
Еще раз, в php есть функция: http://php.net/manual/en/function.uksort.php, в которую нужно скормить ваш массив элементов и компаратор принимающий пару элементов, внутри которого будет ваша функция определения расстояния отдавать ответ. Нужно посмотреть каким образом будет отсортировано множество и окажутся ли все похожие картинки рядом в этом массиве элементов. Если все получится, ваша проверка на количестве элементов более 100к будет работать во много раз ( N^2 / (N*ln(N)+N) ) быстрее.
сортировать он будет расстояния между элементами, тут возможность сортировки определяется каким именно образом определяется расстояние между элементами. Сравнение с 10 это как пример выделения элементов в группы, т.к. подробностей сравнения не было, вместо сравнения с 10 нужно использовать функцию определения расстояния между элементами, но делать это нужно на упорядоченном множестве.
Ilekor, почему вы не отвечаете на вопросы?
Ilekor, ну так пробовали упорядочить массив способом, которым я попросил?
это понятно, но я предполагал если элементы отсортировать то они отсортируются по "похожести", таким образом "одинаковые" ( с минимальным расстоянием ) элементы окажутся рядом и их можно будет выделить в группы. Собственно сработает или нет зависит от того как будет работать функция определения расстояния между элементами, но ТС молчит.
вы все правильно сказали
обход может быть таким:
for i in range(1, 11): for x in range(i + 1, 11): print i, x
а может таким:
for i in range(1, 11): for x in range(1, 11): print i, x
$r_sig = puzzle_vector_normalized_distance($value1['sig'], $value2['sig']); echo $r_sig
Тогда если правильно понимаю мое предыдущее решение должно работать, нужно выбрать все элементы, отсортировать их по расстоянию, которое выдает функция: puzzle_vector_normalized_distance, дальше все как написал выше, делаем один проход, получится сложность: (сложность сортировки + N) * время расчета расстояния---------- Добавлено 06.01.2015 в 02:58 ----------Видимо не дождусь я вашего сообщения, надо спать, но опять погадаю, вероятно вам понадобится функция php: http://php.net/manual/en/function.uksort.php, в которую вы скормите ваш компаратор, таким образом получите отсортированное множество, по которому уже пробежите аналогично коду на python.
В общем не дожидаясь ответа по вангую. Если я верно понимаю задачу, то сравнивать все значения со всеми не обязательно, т.к. если упорядочить данные по некоторой сравниваемой величине, то сравнивать нужно только соседние элементы, допустим имеем упорядоченный список:
[1,2,3,4,20,24,28,40,41,50,90,100,101]
задача найти группы разность между элементами которых не более 10., тогда достаточно взять элемент и сравнивать его со следующим, пока условие не перестанет выполняться, т.е
abs(1 - 2) < 10 # да, добавляем элементы в общее множество
abs(2 - 3) < 10 # аналогично
......
abs(4-20) < 10 # нет, предыдущее множество сформировано, начинаем формировать новое
abs(20 - 28) < 10 и т.д.
таким образом задача решается в один проход, даже для кол-ва элементов более млн. все будет быстро
на python, код будет таким:
import random# создаем тестовый списокitems = [1,2,3,4,20,24,28,40,41,50,90,100,101] # тестовые данные#items = [1e10 * random.random() for x in xrange(int(1e6))] # на большом количестве данных если нужно# сортируем по возрастанию своей функциейitems = sorted( items, key=lambda x: x ) similar = []# обходим сравнивая текущий элемент со следующимfor i, e in enumerate(items[:-1]): if abs(e-items) <= 10.0: if not similar: similar.append(e) similar.append( items ) else: if similar: print similar similar = []if similar: print similar
вывод по данным:
[1, 2, 3, 4][20, 24, 28][40, 41, 50][90, 100, 101]
но затык может быть в том, что множество ваше не сортируемое и условно "расстояние" элемента 1 до 10 может равняться "расстоянию" от 5 до 6, но об этом вы ничего не сказали
А какой тип у колонки sig и как выглядит сравнение двух значений между собой?
find / -newermt 2015-01-01 -type f -name "*.php"
Запоминать не нужно, нужно уметь писать в ноты. С табулатуры далеко не всякий "смогёт", профессионалы с табулатуры не играют, более того, в табулатурной нотации многие вещи которые применяются к нотам вообще не имеют обозначения.
Странное понятие об абсолютном слухе, абсолютный слух если его коротко - когда человек слышит мелодию и параллельно диктует ноты даже не прикасаясь к инструменту. А чтобы переложить в другую тональность никаким мастером быть не нужно, более того это сделает компьютер :)) есть такое понятие как транспозиция.
Серьезно? Кападастер и медиатор часто используют даже дети и соляки они учатся играть до многоголосых композиций, это как раз таки азы, можно играть соло capricho 24, а можно "В траве сидел кузнечик".
Не удержался, с такой уверенностью ерунду пишете.
пс:
http://www.youtube.com/watch?v=Zg-Xl5Rlxy4
http://www.youtube.com/watch?v=HO08T4ukuac