回 帖 发 新 帖 刷新版面

主题:本人写的程序,哪位高手帮我优化一下代码

本人写了个程序,由于水平太次,算法太原始,当输入文件数据量较大时根本无法实现,哪位高手帮我改进一下算法啊...

回复列表 (共7个回复)

沙发

Dim sum1, sum2, aver As Single
最好写成
Dim sum1 As Single, sum2 As Single, aver As Single

我不知道你要完成什么样的任务,因为本人数学基础较差,提一点建议:

你最好将算法优化,先在纸上经过数学处理简单化后再写代码

套用别人的话:

电脑运行速度快,存贮量大,但电脑是给用户使用的,而不是给程序员使用的

板凳

[quote]Dim sum1, sum2, aver As Single
最好写成
Dim sum1 As Single, sum2 As Single, aver As Single

我不知道你要完成什么样的任务,因为本人数学基础较差,提一点建议:

你最好将算法优化,先在纸上经过数学处理简单化后再写代码

套用别人的话:

电脑运行速度快,存贮量大,但电脑是给用户使用的,而不是给程序员使用的[/quote]
我现在头疼的就是不知道怎么优化算法...

3 楼

那N次循环,看到后头都大!~
你自己优吧!~

4 楼

[quote]那N次循环,看到后头都大!~
你自己优吧!~[/quote]
我自己不会优化啊,所以才来请教大家的

5 楼

你最好请教数学系的人

6 楼

能力有限,但有时间(例如到国庆)我一定看看。

7 楼

说下你的循环问题 


For i = 1 To datanum
    sum1 = 0
    For j = i To datanum
        sum2 = 0
        sum1 = sum1 + tmp1(j)       '这里换掉了个循环
        aver = sum1 / (j - i + 1)
        For k = i To j
            sum2 = sum2 + (tmp1(k) - aver) ^ 2
        Next k
        
        data(i, j) = sum2
        data(j, i) = data(i, j)
    Next j
Next i

'................

':
'四次分割
For i = 1 To datanum - 3
        For j = i + 1 To datanum - 2
            s(4) = data(1, i) + data(i + 1, j)      '←把某些计算放到循环外面
            For k = j + 1 To datanum - 1
                s(4) = s(4) + data(j + 1, k) + data(k + 1, datanum)
           '  s(4) = data(1, i) + data(i + 1, j) + data(j + 1, k) + data(k + 1, datanum)'不要浪费时间在重复计算上
                If smin(3) > s(4) Then
                    smin(3) = s(4)
                    st(1) = 1
                    ed(1) = i
                    st(2) = i + 1
                    ed(2) = j
                    st(3) = j + 1
                    ed(3) = k
                    st(4) = k + 1
                    ed(4) = datanum
            End If
            Next k
        Next j
    Next i


我来回复

您尚未登录,请登录后再回复。点此登录或注册