• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Dự án nén dữ liệu.

Bạn muốn open source dự án mình đang phát triển để mọi người cùng theo dõi tiến độ, góp ý kiến, hổ trợ và tiếp sức thêm? Hãy đăng ký dự án mã nguồn mở của mình tại đây

Điều hành viên: Điều hành

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Dự án nén dữ liệu.

Gửi bàigửi bởi truongphu » CN 27/11/2011 4:03 pm

LNĐ: Hôm nay mất toi một ngày tham dự hội thảo giới thiệu thuốc mới, chả nhớ gì ngoài cái đầu "lắc lư"!
Tuy nhiên còn đỡ, chưa gục! bèn mở truyện xem tiếp...
Rất ngạc nhiên khi file nén quá nhỏ!: "Chúng nó" nén sao mà hay thế? chỉ còn hơn 200KB trong khi bộ truyện chuẩn pdf cũng non chục MB! Bèn có ý tưởng...

Dự án nén dữ liệu: làm để nâng cao nhận thức (học hỏi). Các trình nén thông dụng hiện quá tốt.
Biết đâu trên thực hành lý thuyết "sơ sài", sẽ nẩy sinh nhân tài cntt?

1- Công cụ: - Scripting.Dictionary để ghi nhận từ mới; hoặc một công cụ tương đương thuộc VB6.
- Word.Application để di chuyển từng từ (hay nhóm từ); hoặc một công cụ (function) tương đương thuộc VB6.
Ghi chú: dùng object có lẽ chậm nhiều so với VB6.

2- Thao tác: Duyệt từng từ (word, not char) từ đầu đến cuối file.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu đã có trong Dictionary: thay thế với một ký tự unicode > 7999 (unicode tiếng Việt chưa đến số nầy).

3- Ý tưởng dùng Dictionary vì có Dictionary.Exist("từ") rất hay; biết ngay từ nào đã đọc qua. Tuy nhiên như đã nói: có lẽ chậm..

4- Giải nén: vì ta đã quy định ký tự thay thế nên không cần chìa khóa (tự điển) đi kèm file.
- Duyệt từng từ (word, not char) từ đầu đến cuối file nén.
- Nếu chưa có trong Dictionary thì: a- Add vào Dictionary, b- giữ nguyên từ.
- Nếu gặp một ký tự có AscW > 7999, tiến hành thay thế phục hồi từ đã có trong Dictionary theo tính toán từ AscW.

Nếu được nhiều bạn ủng hộ ý tưởng nầy, gởi code sơ bộ; tôi sẽ phụ trách các code VBS và VBA. Tuy nhiên mong code thuần VB6 hơn vì qua thực tiễn thấy chạy nhanh quá!

(vd: Dùng ReadFile API đọc một file text 15 MB mất chưa đến 1 giây!)

Chúc chủ nhật vui vẻ.


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi bangnhatquang68 » T.Năm 01/12/2011 10:29 am

Cái này của bác phú thấy rất hay nhưng hình như file nén của bác là nén 1 file thì phải. nén 1 file liệu có cần thiết chăng? nén thường nén vài file trong folder luôn. nén 1 file thì chẳng để làm gì. ;;)

Cho chảu hỏi bác cái này với!
trong file docx là một file nén. ta chưa quan tâm nó nén được bao nhiêu dung lượng. vấn đề của cháu là nó nén như thế nào? Khi giải nén thì file docx như 1 folder mà trong đó là tùm lum file con. Vậy làm sao nén được như vậy.

không lẽ dùng:
http://www.c-sharpcorner.com/uploadfile ... zipstream/
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi truongphu » T.Năm 01/12/2011 10:41 am

bangnhatquang68 đã viết:Cái này của bác phú thấy rất hay nhưng hình như file nén của bác là nén 1 file thì phải. nén 1 file liệu có cần thiết chăng?


* Tôi mới đưa ra ý tưởng, hy vọng chúng ta cùng thảo luận nếu đề tài thiết thực.

* Nén file để lưu trữ như ZIP, RAR, CAB.... cũng hoạt động như tôi nêu trên, nén từng file một trong folder...
* Nén file liệu có cần thiết? Nếu dùng dữ liệu trên desktop thì chả cần. Tuy nhiên khi chạy trên di động thì file nén càng nhỏ càng tốt. Vì thế nên các soft ebook đều nén file...

bangnhatquang68 đã viết:1 folder mà trong đó là tùm lum file con. Vậy làm sao nén được như vậy.

Đã trình bày trên. Tôi hy vọng sẽ có bạn đưa ra một thuật toán xuất sắc để nén file: tỉ lệ nén cao, thời gian thao tác nhanh. Ở trên tôi đưa ra và mô tả ý tưởng, dùng dictionary và word.app nên chậm và dở.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi dazzlingvit » T.Năm 01/12/2011 11:10 am

Mấy chương trình từ điển cho điện thoại họ thường dùng kỹ thuật nén dictzip, tương thích với gzip nhưng có thêm một bảng tra cứu để "gần như" có thể nhập xuất ngẫu nhiên. Có thể tham khảo dictzip và nâng cấp nó lên ;)

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi bangnhatquang68 » T.Năm 01/12/2011 11:35 am

dazzlingvit đã viết:tương thích với gzip

các bạn tham khảo nè
http://msdn.microsoft.com/en-us/library/ms404280.aspx
http://www.codeproject.com/KB/files/GZipStream.aspx

Gzip nén file và folder thì dotnet có mì ăn liền rồi
nhưng còn làm "Made in tự mình"
Thì có lẽ nên nghĩ thuật toán, nén được file thì nén được files :D
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi bangnhatquang68 » T.Năm 01/12/2011 11:43 am

Theo ngu ý của cháu thì đọc file thành mảng byte()
000 111 222 354 542 .....

dùng thuật toán mã hóa, mã hóa thành đơn giản hơn, như MD5 mã hóa chuỗi thành chuỗi nhỏ hơn.

Những file có thể đọc thành mảng byte mà.
Khi cháu đọc nó thành mảng byte() convert thành mảng string(), dấu được file bất kì trong file txt. Nhưng dung lượng cao hơn. :D ( Hiển nhiên rồi). Cháu cũng đang nghĩ cách nào mã hóa chuỗi to về chuỗi nhỏ và giải nén lại thôi :-?

viewtopic.php?f=17&t=20852&p=115508#p115508
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi dazzlingvit » T.Năm 01/12/2011 12:31 pm

bangnhatquang68 đã viết:
dazzlingvit đã viết:tương thích với gzip

các bạn tham khảo nè
http://msdn.microsoft.com/en-us/library/ms404280.aspx
http://www.codeproject.com/KB/files/GZipStream.aspx

Gzip nén file và folder thì dotnet có mì ăn liền rồi
nhưng còn làm "Made in tự mình"
Thì có lẽ nên nghĩ thuật toán, nén được file thì nén được files :D

Tương thích ở đây ý nói là các chương trình giải nén bình thường hỗ trợ gzip thì giải nén được. Nhưng nếu chương trình của mình muốn tận dụng ưu thế của dictzip thì phải nhập/xuất thủ công. Cái này bắt chước mã nguồn của dictzip (viết bằng C/C++) được mà :D

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi bangnhatquang68 » T.Ba 06/12/2011 6:22 am

http://vi.wikipedia.org/wiki/M%C3%A3_h%C3%B3a_Huffman

Nén file bằng mã Huffman
Trong các bước trên, giả sử đã xây dựng được bộ mã Huffman của 256 ký hiệu có mã ASCII từ 0 đến 255 chứa trong mảng Code[1..256]. Việc nén file có thể phân tích sơ bộ như sau:
Đọc từng byte của file cần nén cho đến khi hết tệp,
Chuyển theo bộ mã thành xâu nhị phân,
Ghép với xâu nhị phân còn dư từ bước trước,
Nếu có đủ 8 bit trong xâu thì cắt ra tám bít đầu tiên ghi vào tệp nén,
Nếu đã hết tệp cần nén thì dừng.
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

Hình đại diện của người dùng
bangnhatquang68
Guru
Guru
Bài viết: 791
Ngày tham gia: T.Ba 26/01/2010 12:44 pm
Đến từ: Vĩ tuyến 17
Has thanked: 20 time
Been thanked: 37 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi bangnhatquang68 » T.Năm 05/01/2012 10:41 pm

Chà vụ nén này, ít ngừoi quan tâm nhỉ?
http://vietbao.vn/Vi-tinh-Vien-thong/Du ... 27964/217/

Nén file thì được rồi, thế làm sao nén được folder nhỉ? :D
Mời anh em lên facebook giao lưu nào!
http://www.facebook.com/groups/145823032176611/

noname_nomoney_nogf
Bài viết: 1
Ngày tham gia: T.Sáu 03/02/2012 1:36 pm

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi noname_nomoney_nogf » T.Sáu 03/02/2012 2:08 pm

Mình có 1 số góp ý phát triển nén văn bản.

bạn ơi cho mình hỏi vậy nó có nén 2 từ trở lên không?
(tạm gọi là nén cả câu, mặc dù với 2 - 3 lần nén liên tục ta vẫn đc kết quả như vậy như tốn 2 -3 lần xét đi xét lại)
ví dụ trong văn bản là: "không thể, tất nhiên là không thể rồi?"
==> "#1, tất nhiên là #1 rồi?" (với #1: không thể)...

thuật toán có mở rộng tới thế này không nhỉ:
(tạm gọi là tìm kiếm và nén dữ liệu tương đồng)
"anh yêu em, anh rất yêu em" ==> "#1, #1-2-5"
(với #1: anh yêu em, #2 là rất, -5 có nghĩa là sẽ thêm vào kiểu insert #1 là #2)...

sau khi nén ở dạng từ điển xong có khi sẽ được là: "#1 #3 #2 #4 #5 #7 #6"
nếu xét dạng cấu trúc thì sẽ có dạng "lên xuống1 #4 lên xuống2"
"lên xuống 1" và "lên xuống 2" có hình dạng như nhau nhưng cao độ khác nhau ==> mình nghĩ bạn sẽ hiểu ý mình

đối với việc nén dữ liệu văn bản cần xét đến trường hợp nếu có ảnh.
Cần chia thành 2 bộ mã riêng biệt là nén chữ và nén hình. Nén chữ thì ta đã đạt được. :")

Còn việc nén cả folder thì mình nghĩ nên áp dụng đệ quy như sau:

add folder cần nén vào list folder

cổng 1:
nếu list folder = trống thì thoát
mở folder đầu của list
add các folder con trong đó vào folder list
add các file con trong đó vào file list
xóa folder đầu mới mở
quay lại cổng 1

thế là toàn bộ file bạn đã có trong tay.(lưu ý: add folder ở đây là add đường dẫn của nó)

nautilux
Bài viết: 9
Ngày tham gia: T.Sáu 07/11/2008 4:39 pm

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi nautilux » T.Sáu 03/02/2012 3:05 pm

nếu nén cả câu như bạn trông có vẻ là tiện hơn , nhưng thực ra lại cần lưu vào 1 biến sao cho có thể chứa được #1 ( như vd của bạn ) là lớn nhất , chưa nói đến các vấn đề sau

Hình đại diện của người dùng
andylam1992
Thành viên danh dự
Thành viên danh dự
Bài viết: 380
Ngày tham gia: T.Hai 06/04/2009 12:57 pm
Đến từ: TP.HCM Q5
Has thanked: 2 time
Been thanked: 4 time
Liên hệ:

Re: Dự án nén dữ liệu.

Gửi bàigửi bởi andylam1992 » T.Tư 08/02/2012 10:39 am

nén huffman ko khả thi, nó luôn phải kèm theo bảng mã hóa(mỗi file khác nhau có mỗi bảng khác nhau), cho nên như thế sẽ làm cho file nén dư thừa do là ko có 1 bảng mã hóa chung, người dùng thà cài chuơng trình nặng chứ không thích file nén nặng.

lúc trước ông thầy có nói đùa là quả bong bóng, khi ko thổi thì nó nén lại, khi thổi lên thì nó phồng to ra gấp 10 lần cũng có. Tuy là cái này là nén về mặt thể tích, nhưng bik đâu sau này công nghệ phát triển thì những dữ liệu số hóa cũng có thể xếp chồng lên nhau thì sao(1 byte có thể ghi dc 2 số)

不相信未作牺牲竟先可拥有
只相信是靠双手找到我欲求
Cần - Kiệm- Liêm(liêm kiết) - Nghĩa - Chí - Tín


Quay về “Dự án mã nguồn mở”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách