VB.NET,如何改善(速度)循环字节数组?

时间:2016-01-06 07:47:45

标签: vb.net algorithm performance for-loop

我在这里想要制作自己的LZSS算法(LZSS Is Compression算法)。但问题是速度。当我尝试压缩具有3 MB文件的文件时,过程是非常长的时间!

在那之后,我研究了什么可以做很长时间,我发现在检查每个字节时很长时间。 这是检查每个字节时的简单代码:

Dim fs As FileStream = New FileStream(ofd.FileName, FileMode.Open)
        Dim buf(fs.Length - 1) As Byte
        fs.Read(buf, 0, fs.Length)

        Dim sise As Integer = fs.Length - 1
        Dim temp2 As Integer = 0
        Dim temp As Byte = 0
        Dim temp3 As Byte = 0

        For i = 0 To sise
            temp = buf(i)
            temp2 = i - 1
            For j = 0 To temp2

                If temp = buf(j) Then

                End If
            Next

        Next

当我以27.3 KB的速度运行并打开文件并花费495毫秒时,如何打开文件20 MB并且需要几分钟甚至几小时。

那么,什么解决方案,这个简单的代码,但需要很多时间.. ??

1 个答案:

答案 0 :(得分:0)

由于时间复杂度O(N*N*M),您的数据压缩方式不可行,其中N是数据大小,M是最大模式大小,在您的情况下为N.你需要改变你的方法。

例如,gzip将原始文本的距离限制为32K,并将模式的最大长度限制为258个字节。在这种情况下,在最坏的情况下,算法的时间复杂度会降低到O(N*32K*258)

显然这还不够快。最坏的情况仍然需要很长时间才能运行。也许你应该看看gzip并决定是否值得提出一种新的数据压缩算法,或者你是否有能力这样做。