Obecnie mam jedno AsyncTask
które obecnie porównuje zdjęć przy użyciu bubble sort
technika przy użyciu OpenCV. Powiedz, że muszę porównywać ze sobą obrazy 400
. Oznaczałoby to porównania 400*401/2=80,200
. Załóżmy, że jedno porównanie trwa 1 sekundę. To jest 80,200 sec
, który jest około 22.27 hours
, który jest absurdalnie długi. Opracowałem więc algorytm tego typu:Optymalizacja algorytmu - równoległe AsyncTasks lub wątki?
Dzieli on obrazy 400
na grupy 5
. Tak więc w każdej grupie znajduje się 80
obrazów.
Pierwsza część algorytmu jest obrazy porównując się w ciągu członków grupy.
Więc, image1
będzie porównywać się z image2-80
, co oznacza, że są porównania 79
. image2
będzie mieć porównania 78
i tak dalej. Co czyni porównania 3,160
. Lub 3,160 sec
. Podobnie, image81
będzie porównywać się z image82-160
i tak dalej. Tak więc wszystkie "porównania grup" są zakończone w 3,160 sec
, ponieważ są prowadzone równolegle.
Druga część algorytmu porówna group 1
elementy z group 2
elementów, group 2
z group 3
, group 3
z group 4
i tak dalej. Oznaczałoby to, że image1
zostanie porównane z image81-160
, co stanowi porównanie 80
, a więc całkowite porównania między group 1
i group 2
byłyby porównaniami 80*80=6400
. Czy możliwe jest porównywanie każdego obrazu równolegle z porównywaniem grup? To znaczy, jeśli image1
porównuje się z image81-160
, wtedy image2
powinno zrobić to samo i tak dalej, podczas gdy inne grupy robią to samo. Tak więc ta część powinna zająć tylko 6400 sec
.
Teraz group1
zostaną porównane z group3
, group2
z group4
, group3
z group5
. ->6400 sec
Po tym, group1 will be compared with group4
i group2
z group5
. ->6400 sec
więc wszystkie grupy są porównywane.
Łączny czas = 3160+6400+6400+6400=22,360sec
. Zdaję sobie sprawę, że im więcej grup, tym więcej czasu zajmie. Musiałbym zwiększyć rozmiar grupy, aby skrócić czas. Tak czy inaczej, skraca czas prawie do 1/4th
to jest faktyczny czas.
Czy ten algorytm jest nierealistyczny? Jeśli tak, dlaczego? Jakie to wady? Jak to naprawić? Czy istnieje lepszy algorytm do szybszego porównywania listy obrazów? Oczywiście nie mogę quick sort
, nie mogę uporządkować zdjęć w porządku rosnącym lub malejącym. Czy mogę?
Jeśli ten algorytm jest możliwy? Jaki byłby najlepszy sposób na jego wdrożenie? Thread
lub AsyncTask
?
dobrze, mogę powiedzieć, że należy używać przedmiotów wątku dla tych operacji. Obiekty AsyncTask są używane do operacji trwających nie dłużej niż kilka sekund. – Joel
Co oznacza porównanie zdjęć? Czy oblicza jakąkolwiek całkowitą kolejność, częściową kolejność lub po prostu podobieństwo? –
@Joel Czy możesz pokazać mi przykład z około 20 obrazami? –