Thuật toán tìm kiếm string gần đúng như google pps

6 1.9K 1
Thuật toán tìm kiếm string gần đúng như google pps

Đang tải... (xem toàn văn)

Thông tin tài liệu

Thuật toán tìm kiếm string gần đúng gửi bởi tienlbhoc » T.Năm 10/04/2008 2:39 pm mới chế cái code tìm kiếm gần đúng , nhờ mọi người cho ý kiến cái : Tư tưởng như sau: +Đầu tiên kiểm tra độ dài string so sánh :ít hay hơn 30% thì loại +Tiếp là so sánh từng ký tự của 2 string nếu không bằng nhau thì so sánh các từ lân cận tiếp theo của cả 2 string Trong khoảng sai số nếu có , thì chỉnh lại vị trí i,j là chỉ số của 2 string đó, cái này sẽ kiểm tra các lỗi thừa hay thiếu từ , nếu có thì số lỗi là số ký tự phải chỉnh lại vị trí i,j .còn nếu không thì cho lỗi là 1 , đọc ký tự kế tiếp +Cuối cùng , khi 1 trong 2 string đã đi hết thì còn mẩu đuôi ta làm : loi += s.Length - i + s1.Length - j; tức là nếu 1 string còn thừa thì cho mẩu đó là lỗi cộng vào nếu số lỗi <=30% thì là đạt , không thì không đạt Code rất ngắn (để tốc độ cho nhanh mà): Mã: Chọn tất cả 1. class ApproximatString 2. { 3. string s; 4. int i, j, k, loi, saiSo; 5. public ApproximatString(string nhap) 6. { 7. s = nhap; 8. saiSo = (int)Math.Round(s.Length * 0.3); 9. } 10. public bool SoSanh(string s1) 11. { 12. if (s1.Length < (s.Length - saiSo) || s1.Length > (s.Length + saiSo)) 13. return false; 14. i = j = loi = 0; 15. while (i < s.Length && j < s1.Length) 16. { 17. if (s[i] != s1[j]) 18. { 19. loi++; 20. for (k = 1; k <= saiSo; k++) 21. { 22. if ((i + k < s.Length) && s[i + k] == s1[j]) 23. { 24. i += k; 25. break; 26. } 27. else if ((j + k < s1.Length) && s[i] == s1[j + k]) 28. { 29. j += k; 30. break; 31. } 32. } 33. } 34. i++; 35. j++; 36. } 37. loi += s.Length - i + s1.Length - j; 38. if (loi <= saiSo) 39. return true; 40. else return false; 41. } 42. } Còn đây là kết quả: Sửa lần cuối bởi tienlbhoc vào ngày T.Năm 18/09/2008 2:17 pm với 1 lần sửa. Diễn đàn và blog phần mềm tự làm : http://my.opera.com/DienDanTienlbhoc/forums/ http://my.opera.com/tienlbhoc/blog/ tienlbhoc Thành viên tâm huyết Bài viết: 410 Ngày tham gia: T.Bảy 14/07/2007 10:06 pm Đến từ: Hà Nội Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi ngaymaikhongtan » T.Bảy 12/04/2008 7:23 am Ý tưởng cũng khá hay, nhưng minh vẩn không hĩu chổ này, bạn giải thích cho mình rỏ nhe, tai sao bạn chọn kiểm tra độ dài string so sánh :ít hay hơn 30% thì loại, tại sao bạn lại chọn mức la 30% vậy! welcome to http://gocnhinviet.com ngaymaikhongtan Thành viên chính thức Bài viết: 39 Ngày tham gia: T.Bảy 29/03/2008 12:05 pm Đến từ: Cà Mau • Tài khoản Yahoo Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi tienlbhoc » T.Bảy 12/04/2008 8:03 am thuật toán trên mình sửa rồi , cái đoạn tìm lân cận chỉ cho mặc định lỗi ++ thôi (vì thế kết quả sẽ rộng hơn). Còn vì sao là 30% vì 20% mình thử thấy hơi ít 40% thấy hơi nhiều , con số này tuỳ theo thực nghiệm mà chỉnh thôi . Còn vì sao mà độ dài lớn hơn hoặc nhỏ hơn 30% vì ví dụ a so sánh với application , thì dài thế này có cần phải so sánh nữa không hả , làm chậm chương trình. Mã: Chọn tất cả 1. class ApproximatString 2. { 3. string s; 4. int i, j, k, loi, saiSo; 5. public ApproximatString(string nhap) 6. { 7. s = nhap; 8. saiSo = (int)Math.Round(s.Length * 0.3); 9. } 10. public bool SoSanh(string s1) 11. { 12. if (s1.Length < (s.Length - saiSo) || s1.Length > (s.Length + saiSo)) 13. return false; 14. i = j = loi = 0; 15. while (i < s.Length && j < s1.Length) 16. { 17. if (s[i] != s1[j]) 18. { 19. loi++; 20. for (k = 1; k <= saiSo; k++) 21. { 22. if ((i + k < s.Length) && s[i + k] == s1[j]) 23. { 24. i += k; 25. break; 26. } 27. else if ((j + k < s1.Length) && s[i] == s1[j + k]) 28. { 29. j += k; 30. break; 31. } 32. } 33. } 34. i++; 35. j++; 36. } 37. loi += s.Length - i + s1.Length - j; 38. if (loi <= saiSo) 39. return true; 40. else return false; 41. } 42. } Diễn đàn và blog phần mềm tự làm : http://my.opera.com/DienDanTienlbhoc/forums/ http://my.opera.com/tienlbhoc/blog/ tienlbhoc Thành viên tâm huyết Bài viết: 410 Ngày tham gia: T.Bảy 14/07/2007 10:06 pm Đến từ: Hà Nội Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi giongto35 » T.Bảy 12/04/2008 10:30 am Hay thật . Tìm chuẩn quá , hết chỗ chê , ________________________________________________________________________ ________________________ . . . . . . . . . . . . . giongto35 Advance Member Bài viết: 197 Ngày tham gia: T.Năm 19/04/2007 10:17 am Đến từ: Đà Nẵng City • Tài khoản Yahoo Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi vinhphuoc91 » T.Bảy 12/04/2008 12:20 pm Cái này ứng dụng từ điển là ok nhất, hehe phải nhanh chóng paste nó vào chương trình của mình thôi Cảm ơn tienlbhoc nhiều nhá. [b][color=#FF0000]Xin lỗi, tạm thời không thể online thường xuyên được, dạo này có việc bận quá :( [/color][/b] vinhphuoc91 Advance Member Bài viết: 146 Ngày tham gia: T.Tư 26/03/2008 5:52 pm Đến từ: Phú Yên • Tài khoản Yahoo Đầu trang Re: Thuật toán tìm kiếm string gần đúng . Thuật toán tìm kiếm string gần đúng gửi bởi tienlbhoc » T.Năm 10/04/2008 2:39 pm mới chế cái code tìm kiếm gần đúng , nhờ mọi người cho ý kiến cái : Tư tưởng như sau: +Đầu tiên. Mau • Tài khoản Yahoo Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi tienlbhoc » T.Bảy 12/04/2008 8:03 am thuật toán trên mình sửa rồi , cái đoạn tìm lân cận chỉ cho mặc định lỗi ++. 14/07/2007 10:06 pm Đến từ: Hà Nội Đầu trang Re: Thuật toán tìm kiếm string gần đúng gửi bởi ngaymaikhongtan » T.Bảy 12/04/2008 7:23 am Ý tưởng cũng khá hay, nhưng minh vẩn không hĩu chổ này, bạn giải

Ngày đăng: 05/07/2014, 23:21

Từ khóa liên quan

Mục lục

  • Thuật toán tìm kiếm string gần đúng

  • Re: Thuật toán tìm kiếm string gần đúng

  • Re: Thuật toán tìm kiếm string gần đúng

  • Re: Thuật toán tìm kiếm string gần đúng

  • Re: Thuật toán tìm kiếm string gần đúng

  • Re: Thuật toán tìm kiếm string gần đúng

Tài liệu cùng người dùng

Tài liệu liên quan