私は現在、 OpenCVAsyncTask
を使用した手法を使用して画像を比較する単一のものを持っています。たとえば、画像を互いにbubble sort
比較する必要があります。これは比較400
を意味します。400*401/2=80,200
1 回の比較に 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
、並行して実行されるため、終了します。
アルゴリズムの 2 番目の部分では、要素group 1
をgroup 2
要素group 2
と比較します。これはが と比較されることを意味し、これは比較であるため、 と の間の合計比較は比較になります。グループ比較と並行して各画像比較を行うことは可能ですか? つまり、自分自身をthenと比較する場合は、他のグループが同じことをしている間、同じことを行う必要があります。したがって、この部分は のみを取る必要があります。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
?