在知乎和CSDN上发起了一个问题,题目为【matlab
降低算法时间复杂度的方法?】正文如下:
我在用matlab编写一个小算法,这个算法里面可能多次循环的嵌套,导致得到最终结果(输入Reader=800,Tag=1000,r=30,范围为[1,900]的时候),花费了将近800多秒!劳驾各方神圣给我指点迷津,降低我这个算法的时间复杂度,有什么好点子好方法么?
更新:原题是RFID网络冗余阅读器去除算法,即要去除掉系统网络中冗余的阅读器,就是图中的红色圈圈,下图是已经去除后的效果。
【算法执行结果图如下】
算法设计:
①
definition:
cc(covered count)
——每个tag被reader覆盖的数量(黑点到红圈圆心的距离:D<=r)
nc(neighbor
count)——每个reader邻居的数量(两个圆圈原点距离:L<=2*r)
ncc(neighbor cover
count)——每个reader的邻居所覆盖的所有tag数量的总和
②
steps:
a.找出所有cc=1的tag,由于这些tag只被独有的reader覆盖,所以这些对应的reader为非冗余reader,其下所覆盖的所有tag均被该reader锁定(hold);
b.当所有cc=1对应的reader被找到后,即剩下的tag的cc均>1,剩下的reader根据nc值由低到高依次循环执行c,d,e操作(邻居越多的阅读器在实际中越容易对其他阅读器产生干扰);
c.当有多个nc值相等的reader,判断相同nc值的reader的ncc值大小,根据ncc的值由高到低循环进行d,e操作;
d.该reader中所有的tag的cc值减1,该reader为冗余reader&#x