Attualmente ho un singolo AsyncTask
che attualmente confronta le immagini usando la tecnica bubble sort
usando OpenCV. Dire, devo confrontare le immagini 400
l'un l'altro. Ciò significherebbe i confronti 400*401/2=80,200
. Supponiamo che un confronto impieghi 1 secondo. Quindi, questo è 80,200 sec
che è di circa 22.27 hours
che è incredibilmente lungo. Quindi, ho sviluppato un algoritmo di questo tipo:Ottimizzazione dell'algoritmo - AsyncTask o thread paralleli?
Divide le immagini 400
in gruppi di 5
. Quindi ci sono le immagini 80
in ciascun gruppo.
La prima parte dell'algoritmo sono le immagini che si confrontano all'interno dei membri del gruppo.
Quindi, image1
si confronterà con image2-80
, il che significa che ci sono i confronti 79
. image2
avrà confronti 78
e così via. Il che rende i confronti 3,160
. O 3,160 sec
. Allo stesso modo, image81
si confronterà con image82-160
e così via. Quindi tutti i "confronti di gruppo" sono finiti in 3,160 sec
perché sono eseguiti in parallelo.
La seconda parte dell'algoritmo confronterà group 1
elementi con elementi group 2
, group 2
con group 3
, group 3
con group 4
e così via. Ciò significherebbe che image1
verrà confrontato con image81-160
, ovvero confronti 80
e quindi i confronti totali tra group 1
e group 2
corrisponderanno a 80*80=6400
confronti. È possibile confrontare ogni immagine in parallelo con i confronti di gruppo? Cioè se image1
si confronta con image81-160
quindi image2
dovrebbe fare lo stesso e così via, mentre gli altri gruppi stanno facendo lo stesso. Quindi, questa parte dovrebbe prendere solo 6400 sec
.
Ora, group1
saranno confrontati con group3
, group2
con group4
, group3
con group5
. ->6400 sec
Dopo di che, group1 will be compared with group4
e group2
con group5
. ->6400 sec
Quindi tutti i gruppi vengono confrontati.
Tempo totale = 3160+6400+6400+6400=22,360sec
. Capisco più i gruppi, più tempo ci vorrebbe. Quindi, dovrei aumentare le dimensioni del gruppo per ridurre l'aumento nel tempo. Ad ogni modo, riduce il tempo a quasi 1/4th
è il tempo reale.
Questo algoritmo non è realistico? Se è così, perché? Quali sono i suoi difetti? Come lo risolverei? Esiste un algoritmo migliore per confrontare più rapidamente un elenco di immagini? Ovviamente no quick sort
, non riesco a organizzare le immagini in ordine ascendente o discendente. O posso?
Se questo algoritmo è possibile? Quale sarebbe il modo migliore per implementarlo? Thread
o AsyncTask
?
bene, io posso dire che si dovrebbe utilizzare gli oggetti della discussione per queste operazioni. Gli oggetti AsyncTask vengono utilizzati per operazioni che durano non più di pochi secondi. – Joel
Cosa significa confronto immagine? Calcola qualsiasi ordine totale, o ordine parziale, o semplicemente somiglianza? –
@Joel Puoi mostrarmi un esempio con circa 20 immagini o giù di lì? –