Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: [ Solved ] Thuật toán tìm kiếm string gần đúng

  1. #1
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    Mặc định [ Solved ] Thuật toán tìm kiếm string gần đúng

    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à):
    Visual C# Code:
    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.                         loi += k - 1;
    26.                         break;
    27.                     }
    28.                     else if ((j + k < s1.Length) && s[i] == s1[j + k])
    29.                     {
    30.                         j += k;
    31.                         loi += k - 1;
    32.                         break;
    33.                     }
    34.                 }
    35.             }
    36.             i++;
    37.             j++;
    38.         }
    39.         loi += s.Length - i + s1.Length - j;
    40.         if (loi <= saiSo)
    41.             return true;
    42.         else return false;
    43.     }
    44. }
    Còn đây là kết quả:
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  2. #2
    Ngày gia nhập
    07 2007
    Bài viết
    17

    bạn làm cái process bar thế nào vậy và làm sao lấy được thời gian tìm nữa cho mình xin cái code được không

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    process bar là control có sẵn , cho nó vào 1 thread mà chạy . Bạn phải tự học các sử dụng nó thôi . chỉnh phần property value (tương ứng với phần trăm) là nó hiển thị.
    Tính thời gian thì trước khi xử lý thuật toán lưu thời gian hiện hành của hệ thống , sau khi chạy xong , lưu thời gian lần nữa , lấy nó trừ đi là ra.
    Cái trên là từ điển của tớ , có mã nguồn luôn , nhưng code rất dài , nếu mới học thì nói thật nên tự tìm hiểu cách làm như trên tớ hướng dẫn , chứ đọc code còn lâu quá thế ) . Process bar là 1 trong những control dễ dùng nhất
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    336

    uhm ... mình thấy chức năng này trong từ điển hơi thừa khi bạn đã có chức năng tìm theo wildcard -.-'
    code ra gió bão

  5. #5
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    wildcard , thậm chí regex (thằng này mạnh bằng 10 wildcard) đi , truy vấn làm sao mà ra được kết quả như trên vậy bác . Stardict cũng có wildcard sao vẫn cần truy vấn mờ
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    336

    Mặc định [ Solved ] Thuật toán tìm kiếm string gần đúng

    ... chắc tại mình chưa xài chức năng này bao giờ cả -.-
    mình có ý tưởng là bạn thử làm giống như google ấy gõ sai thì nó trả lại 1 từ gần giống nhất
    code ra gió bão

Các đề tài tương tự

  1. Algorithm Thuật toán tìm kiếm gần đúng và tóm tắt văn bản trong C# là gì?
    Gửi bởi oneclicklogin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 18-09-2013, 11:17 AM
  2. Các thuật toán sắp xếp và tìm kiếm cho Quản lí thư viện chạy không đúng kết quả?
    Gửi bởi dangquan045 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 3
    Bài viết cuối: 28-09-2012, 07:02 PM
  3. [ Solved ]String Issues !
    Gửi bởi rox_rook trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 25-09-2008, 10:43 AM
  4. [Solved] Hỏi về thuật toán tìm kiếm
    Gửi bởi thanhlinhhue trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 18-09-2008, 08:36 AM
  5. [Solved] Hỏi về các thuật toán tìm kiếm
    Gửi bởi vodanhxxx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 17-09-2008, 07:07 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn