大道歌行 2022-11-23 15:54 采纳率: 0%
浏览 6
已结题

如何把这个程序的复杂度降低

如何把这个程序的复杂度降低

img

img

我的解答思路和尝试过的方法
I = imread('E:\学习文档\image\1.bmp');
[m,n] = size(origin_I);
PE_I = origin_I;
for i = 2: m - 1 %不是边界像素值
    for j = 2: n - 1
        a = origin_I(i-1,j-1);
        b = origin_I(i-1,j);
        c = origin_I(i-1,j+1);
        d = origin_I(i,j-1);
        e = origin_I(i,j+1);
        f = origin_I(i+1,j-1);
        g = origin_I(i+1,j);
        h = origin_I(i+1,j+1);
        x1 = sum(a+b+c+d+e+f+g+h)/8;%把邻域 8 个像素的均值作为初始值
        x = [a,b,c,d,e,f,g,h];
        for e = 1: 8 %计算各个方向的梯度
            k(e) = x(e) - x1;
        end
        for t = 1: 8 %计算各方向梯度模的大小
            p(t) = abs( k(t)) ;
        end
            p = sort(p);
            k = sort(k);
        for f3 = 1: 8 %计算各方向的权值
            w(f3) = mse(f3) /sum(mse(f3)) ;
        end
        w = sort(w,1,'descend');%各个方向的权值进行降序排列
        for i = 1: 8 %根据权值求出预测误差
            m(i,j) = sum(w(i) * ((k(i) +x1)));
            PE_I(i,j) = origin_I(i,j) - m(i,j);
        end
    end
end

我想要达到的结果

我复现一下复杂度还是很高,有没有更好的方法

希望有相关matlab代码
  • 写回答

7条回答 默认 最新

  • *拯 2022-11-24 15:10
    关注

    对于程序,衡量其好坏的重要标准是时间复杂度和空间复杂度。在可以完成目标任务的前提下,使程序具有较低的时间复杂度和较低的空间复杂度是我们一直追求的目标。

    然而有时候两者不可兼得。在减少时间复杂度的状况下,空间复杂度往往会提高,而在减少空间复杂度的状况下,时间复杂度往往会提高。想要在二者之间得到平衡,显然,这不太容易,可谓是鱼和熊掌不可兼得!

    好吧,开始我们的正题!

    假设我们想象这样一个场景,在我们的电脑上有一份文件,上面保存了水果名称,比如类似这样的一些数据,苹果,梨,桃子,西瓜,葡萄,苹果,西瓜......。我们的目的是统计这些名称中谁出现的次数最多。

    程序实现思路很简单,也就是初始化一个字典,如果该名称不存在,则将该名称加入字典,其值设为一,如果该名称已存在,则其值加一。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月24日
  • 赞助了问题酬金30元 11月23日
  • 修改了问题 11月23日
  • 创建了问题 11月23日