В настоящее время у меня есть один AsyncTask
, который в настоящее время сравнивает изображения с использованием метода bubble sort
с использованием OpenCV. Скажем, мне нужно сравнить 400
изображений друг с другом. Это будет означать 400*401/2=80,200
сравнения. Предположим, что одно сравнение занимает 1 секунду. Итак, это 80,200 sec
, что примерно равно 22.27 hours
, что смехотворно долго. Итак, я разработал алгоритм такого типа:
Он делит 400
изображений на группы по 5
. Итак, в каждой группе 80
изображений.
Первая часть алгоритма — изображения, сравнивающие себя внутри членов группы.
Итак, image1
будет сравнивать себя с image2-80
, а это значит, что имеется 79
сравнений. image2
будет иметь 78
сравнений и так далее. Что делает 3,160
сравнений. Или 3,160 sec
. Точно так же image81
будет сравнивать себя с image82-160
и так далее. Таким образом, все «групповые сравнения» завершаются в 3,160 sec
, потому что они выполняются параллельно.
Вторая часть алгоритма будет сравнивать group 1
элементов с group 2
элементами, group 2
с group 3
, group 3
с group 4
и так далее. Это будет означать, что image1
будет сравниваться с image81-160
, что составляет 80
сравнений, и поэтому общее количество сравнений между group 1
и group 2
будет 80*80=6400
сравнениями. Можно ли сравнивать каждое изображение параллельно с групповым сравнением? То есть, если image1
сравнивает себя с image81-160
, то image2
должен делать то же самое и так далее, в то время как другие группы делают то же самое. Итак, эта часть должна занимать всего 6400 sec
.
Теперь group1
будет сравниваться с group3
, group2
с group4
, group3
с group5
. ->6400 sec
После чего group1 will be compared with group4
и group2
с group5
. ->6400 sec
Итак, все группы сравниваются.
Общее время = 3160+6400+6400+6400=22,360sec
. Я понимаю, что чем больше групп, тем больше времени это займет. Итак, мне пришлось бы увеличить размер группы, чтобы уменьшить увеличение времени. В любом случае, это сокращает время почти до 1/4th
реального времени.
Является ли этот алгоритм нереалистичным? Если да, то почему? Какие у него недостатки? Как бы я это исправить? Есть ли лучший алгоритм для более быстрого сравнения списка изображений? Явно не quick sort
, я не могу расположить изображения в порядке возрастания или убывания. Или я могу?
Возможен ли этот алгоритм? Каков был бы лучший способ реализовать это? Thread
или AsyncTask
?