Hỏi về thuật toán nén chuỗi

Đề: Cho 1 chuỗi, nén chuỗi tối ưu:
vd: aabbbcdededereaabbc
-> 2a3bcdededere2a2bc
-> 2a3bc3(de)re2a2bc
Em có ý tưởng là cho duyệt theo từng dãy con nhưng code mãi vẫn ko return kq đúng
các cao nhân giúp em vs :sweat_smile:

2 Likes

gần giống thuật toán nén LZW :yum: ý tưởng thuật toán của bạn chưa rõ ràng lắm, nếu nén như vậy sẽ bị xung đột mất.

3 Likes

Bạn làm dc đến độ phức tạp cỡ nào rồi

1 Like
for i:= 1 to length(s) do begin
                if s[i] = s[i+1] then inc(count) else begin
                        if count = 1 then z:=z+s[i]
                        else z:= z+inttostr(count)+s[i];
                        count:=1;
                end;
        end;

        s:=z;

        for len:=2 to length(s) do begin
                for i:= 1 to length(s) do begin
                        if (copy(s,i,len) = copy(s,i+len+1,len)) then inc(count) else begin
                                if count <> 1 then t:= t+'('+inttostr(count)+')'+copy(s,i,len);
                                count:= 1;
                        end;
                end;
        end;

nó sinh ra tùm lum :joy:, @minhthai chắc là O(n^2)

1 Like

mình chưa code thử nữa nhưg cách của mình cũng n^2, dùng mảng fail của KMP

2 Likes

pascal a :joy::grinning:

1 Like

This post was flagged by the community and is temporarily hidden.

dùng thử thuật toán lempel ziv đi bạn

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?