Thứ Sáu, 4 tháng 2, 2011

ESIder's challenge

lúc khởi đầu cũng gặp nhiều khó khăn, nhiều nhất là ở thuật toán tìm kiếm
do dó hôm nay viết vài dòng chia sẻ chút kinh nghiệm tích lũy được từ chương trình.
Khởi đầu là dữ liệu, làm sao để có dữ liệu mới nhất, dữ liệu mới chỉ có thể lấy từ nhà cung cấp dịch vụ karaoke 6 số. Ở đây người ta chỉ cho tải dữ liệu bài file PDF
File PDF -> File Xml -->Processing(Parse Xml)-->Expecting data
qua một quá trình nhâm nhi thì cũng tìm thấy được giải pháp

Giờ là đến giải thuật tìm kiếm:
dữ liệu lúc đầu là file xml, mình dùng một parser và đây cũng là phiên bản đầu tiên (chỉ mình mình sử dụng), với phương pháp này thì tìm kiếm thật sự là đơn giản nhưng tốc độ chậm, load nhiều. => dẹp
Bước qua thử nghiệm hai tìm kiếm nhị phân trên toàn bộ file, file được cấu trúc thành nhiều record bài hát, mỗi record là có số byte bằng nhau. Phương pháp này còn thê thảm hơn nữa, đưa vào Nokia 6720 thì lẹ, máy mình Sony K850i thì như rùa, tìm lâu ơi là lâu! => dẹp
Thử nghiệm thứ ba load không toàn bộ, phương pháp này chỉ load lên danh sách tên bài hát, nếu tìm bài hát nào thì lấy phần còn lại và hiển thị vừa nhanh vừa tiết kiệm bộ nhớ. Tuy nhiên hay bị lỗi ở hàm Reset trong InputStream vậy là không khả thi.
Phiên bản thử nghiệm thứ tư. Phiên bản này load hết tất cả lên và tìm kiếm, tốc độ nhanh, nhưng rất tốn bộ nhớ, hay bị lỗi out of memory. Bản này là bản 1.1 mình đưa lên mạng, mình nghĩ là bộ nhớ điện thoại giờ cũng khá khá rồi thôi thì kệ =),
Phiên bản thử nghiệm 5. Tách các bài hát theo Alphabe, tìm kiếm nhanh, ít tốn bộ nhớ. đang xài cho phiên bản 1.3


Không có nhận xét nào:

Đăng nhận xét