С нулём всё ок, обратите внимание на кусок сорца от ТС:
Он же впёр после объявления функции "return false" в пустоту.
А что он сортировать будет? У него поля сигнатур - это хэши изображений в виде строки, а схожесть определяется внешней либой при сравнении хэшей попарно. Результат сравнения - значение вероятности от 0 до 1 включительно с обеих сторон. А вы и вовсе разность рандомных чисел с 10 зачем-то сравниваете :-\
По таймауту вылетает? Если поставить таймаут в 5 минут выполнения, то сколько элементов из ваших 100000 успевает перебрать цикл?
И к чему вы это написали?
Теперь понял о чём вы. Вы гасите квадратичный рост сложности вычислений пропуская самого себя и попарно проверенные элементы. К сожалению топикстарер вернётся к той же неоптимизированной сложности, от которой страдает в данный момент, уже через 40% элементов (140к сигнатур изображений).
Самый быстрый для последующей выборки вариант - кэш вычислений, который будет расти с каждым новым добавленным элементом, перекладывая постоянные затраты проца на хард, делая расчёты сходства только единожды - при добавлении изображения:
Шаг #1. Изображений в базе: 0, добавляем новое, считать пока нечего.
Шаг #2. Изображений в базе: 1, добавляем новое, считаем показатели схожести для нового и старого.
Шаг #3. Изображений в базе: 2, добавляем новое, считаем показатели схожести для нового и всех старых.
...
Шаг #N. Изображений в базе: N - 1, добавляем новое, считаем показатели схожести себя с предыдущими.
Выборка схожих в дальнейшем станет намного проще и быстрее.
Это вообще без комментариев.
У топикстартера речь была о неких мифических 10% между каждым значением, но в связи с полным нежеланием решить собственную проблему из-за фатальной лени - забыл указать самое главное:
Ни структуры таблиц, ни примера данных для теста. Нихрена нету.
На текущий момент юмор заключается в том, что логика работы у ТС построена на запихивании в БД изображений с полной выгрузкой всей этой дряни оттуда каждый раз и в довесок идёт попарное постоянное сравнивание всех значений через внешнюю либу. Сложность вычислений близка к N^2 и упростить не выйдет, по крайней мере пока юзается блэкбокс в виде puzzle_vector_normalized_distance() всего на одно сравнение за раз. По теории алгоритмов попарное сравнение быстрее N * ln(N) и вовсе быть не может, читайте матчасть.
При оценке сложности алгоритма играет роль только количество атомарных итераций над элементами. Реальное время выполнения всего этого месива считается отдельно.
Дорогой мой, а давно (N - 1)^2 = N^2 / 2?
Меня определённо забавляют дилетанты, которые ни на сантиметр в предмете обсуждения не секут, но мнение имеют. Код будет дырявый настолько, насколько криворукого разраба вы себе найдёте.
В список невероятно медленного гумна забыли добавить ещё Hibernate.
Рок и метал - это электруха + комбарь, а не груша. Без понятия что вы на своём нейлоне собрались играть пальчиками.
Двигло кривое до жути.
http://sexprim.com/individualki/girl13
http://sexprim.com/individualki/girl13--