banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Vấn đề về Thuật toán so sánh tìm kiếm  XML
  [Programming]   Vấn đề về Thuật toán so sánh tìm kiếm 21/08/2006 12:36:21 (+0700) | #1 | 16625
[Avatar]
kamikazeq
Member

[Minus]    0    [Plus]
Joined: 04/07/2006 03:20:53
Messages: 837
Location: Panic Malware Planet
Offline
[Profile] [PM] [Yahoo!]
Ví dụ mình đang có 1 cơ sở dữ liệu bên dưới: (chứa trong EXCEL, và sử dụng Visual Basic có sẵn trong EXCEL).


Mình tạo 1 Commandbutton kèm theo đoạn Code với chức năng tìm kiếm "tên" từ dòng 3 đến dòng cuối (dòng 11 ) trong cột A. Cách thức tìm như sau:


-tìm chuỗi "công thành" và chương trình sẽ in ra họ tên và tuổi thoả điều kiện, đó là:


(Ở đây, chương trình hiểu rằng: ô họ tên phải có chứa đủ 2 từ "công""thành" , không cần thứ tự)

Các bác có thể chỉ dẫn thuật toán tối ưu tốc độ cho công việc tìm kiếm trên được không. Nói rõ chút chút. Thanks các bác nhiều.
IDM 5.18 http://tinyurl.com/pl2ejj | Quick Remove Malware http://tinyurl.com/lbbm9x - http://tinyurl.com/arna6g
[Up] [Print Copy]
  [Question]   Vấn đề về Thuật toán so sánh tìm kiếm 29/08/2006 11:55:14 (+0700) | #2 | 18913
hellovn
Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:33:12
Messages: 13
Offline
[Profile] [PM]
Ủa,tui thấy là nó phải so sánh tất cả các row để so sánh mà smilie
[Up] [Print Copy]
  [Question]   Vấn đề về Thuật toán so sánh tìm kiếm 01/09/2006 11:16:19 (+0700) | #3 | 19727
[Avatar]
Thomas_Black
Member

[Minus]    0    [Plus]
Joined: 14/07/2006 23:59:35
Messages: 51
Offline
[Profile] [PM]
Bạn nên Sort lại tên, sau đó có thể dùng thuật toán chia nhị phân để tìm kiếm
[Up] [Print Copy]
  [Question]   Vấn đề về Thuật toán so sánh tìm kiếm 02/09/2006 07:00:13 (+0700) | #4 | 20037
[Avatar]
hakuso
HVA Friend

Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
[Profile] [PM]
Trước mắt thuật toán tui nghĩ sẽ là vầy, và tui cũng chưa thấy nên tối ưu vào điểm nào
Bạn làm các việc sau khi nút được nhấn
1. Với chuỗi trong textbox, ta cắt (split) nó ra thành 1 mảng các chuỗi với kí tự phân cách là khoảng trắng (' '). Mục đích của việc cắt là bạn sẽ có mảng và mỗi phần tử là các từ cần tìm. Tạm gọi mảng này là mảng A
2. Bắt đầu duyệt từng record trong excel. Với mỗi record ta:
* Lấy về chuỗi "họ tên" của record đó
* Cắt chuỗi "họ tên" đó thành các từ (chứa trong mảng). Tạm gọi mảng này là mảng B
* Công việc của bạn giờ là tìm xem mảng B có chứa mảng A hay không. Chỉ cần duyệt từng phần tử của mảng A, với mỗi phần tử mảng A thì so sánh với từng phần tử của mảng B.
Khi kết thúc nếu mảng B chứa mảng A tức ô "họ tên" đó có chứa các từ nằm trong textbox rồi.

Đó là thuật toán của tui, tuy khá đơn giản nhưng tui chưa nghĩ ra điểm nào gây tốn thời gian và tài nguyên cả. Nếu có xin bạn nêu ra để tui thấy được
Thắc mắc mà tui nghĩ bạn sẽ gặp phải có lẽ là so sánh giữa 2 từ xem có bằng nhau không.
Live, fight, work and study
[Up] [Print Copy]
  [Question]   Re: Vấn đề về Thuật toán so sánh tìm kiếm 04/09/2006 21:52:19 (+0700) | #5 | 20573
[Avatar]
kamikazeq
Member

[Minus]    0    [Plus]
Joined: 04/07/2006 03:20:53
Messages: 837
Location: Panic Malware Planet
Offline
[Profile] [PM] [Yahoo!]

hellovn wrote:
Ủa,tui thấy là nó phải so sánh tất cả các row để so sánh mà  

Câu nói của bạn nghe không hiểu cho lắm

Thomas_Black wrote:
Bạn nên Sort lại tên, sau đó có thể dùng thuật toán chia nhị phân để tìm kiếm  

Bạn ơi, cái cột Họ và Tên không SORT được, vì ở đây mình xếp theo cột Tên đường. Ý của bạn là SORT cột Họ và Tên rồi tìm so sánh , sau đó SORT lại cột Tên đường hả. Mình không hiểu lắm smilie

hakuso wrote:
1. Với chuỗi trong textbox, ta cắt (split) nó ra thành 1 mảng các chuỗi với kí tự phân cách là khoảng trắng (' ').  

Bạn nói kỹ hơn phần này đi bạn.
Bạn biết tui cắt chuỗi như thế nào không. Tui dùng hàm MID đó (trước đó phải dò khoảng trắng tùm lum, rồi cắt ra) ==> chậm cực kỳ. smilie(
IDM 5.18 http://tinyurl.com/pl2ejj | Quick Remove Malware http://tinyurl.com/lbbm9x - http://tinyurl.com/arna6g
[Up] [Print Copy]
  [Question]   Re: Vấn đề về Thuật toán so sánh tìm kiếm 07/09/2006 06:23:22 (+0700) | #6 | 21266
[Avatar]
hakuso
HVA Friend

Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
[Profile] [PM]

kamikazeq wrote:
Bạn nói kỹ hơn phần này đi bạn.
Bạn biết tui cắt chuỗi như thế nào không. Tui dùng hàm MID đó (trước đó phải dò khoảng trắng tùm lum, rồi cắt ra) ==> chậm cực kỳ. smilie(  


Tức là vầy, giả sử người ta nhập vô là

nguyễn văn a 


Sau đó bạn làm sao , dùng hàm nào thì dùng nhưng kết quả là bạn có 1 array với các phần tử là

arr(0)="nguyễn"
arr(1)="văn"
arr(2)="a" 


Đấy chính là cắt chuỗi với kí tự cắt là ' ' :wink:
Chắc bạn dùng VBA để thực hiện rồi, tui cũng không rõ VBA xử lý chuỗi mạnh không ? Vì trong thuật toán bạn sẽ cắt chuỗi liên tục nên cần ưu tiên tốc độ
Live, fight, work and study
[Up] [Print Copy]
  [Question]   Vấn đề về Thuật toán so sánh tìm kiếm 09/09/2006 00:45:45 (+0700) | #7 | 21819
[Avatar]
kamikazeq
Member

[Minus]    0    [Plus]
Joined: 04/07/2006 03:20:53
Messages: 837
Location: Panic Malware Planet
Offline
[Profile] [PM] [Yahoo!]
Vậy có ai biết hàm Split này dùng ra sao không, cho mình ví dụ với
IDM 5.18 http://tinyurl.com/pl2ejj | Quick Remove Malware http://tinyurl.com/lbbm9x - http://tinyurl.com/arna6g
[Up] [Print Copy]
  [Question]   Re: Vấn đề về Thuật toán so sánh tìm kiếm 09/09/2006 03:55:48 (+0700) | #8 | 21864
anhchangngoc
Member

[Minus]    0    [Plus]
Joined: 27/12/2005 12:10:28
Messages: 2
Offline
[Profile] [PM] [Email] [Yahoo!]
ví dụ: a là mảng. ta cần cắt chuổi "123456 / 456789/123789"
a=split('/');
//sau khi cắt ta được a[0]="123456 ", a[1]=" 456789",a[2]="123789"
hàm split sẽ cắt chuổi được ngăn cách bởi ký tự '/'
nếu muốn cắt chuổi được ngăn cách bởi khoảng trắng thì:
a=split(' ');
[Up] [Print Copy]
  [Question]   Vấn đề về Thuật toán so sánh tìm kiếm 15/09/2006 01:21:30 (+0700) | #9 | 23382
[Avatar]
kamikazeq
Member

[Minus]    0    [Plus]
Joined: 04/07/2006 03:20:53
Messages: 837
Location: Panic Malware Planet
Offline
[Profile] [PM] [Yahoo!]
À, vậy hàm Split nó tự cho vô từng phần tử mỗi mảng được cắt phải ko.
Mình hiểu rùi, Thanks các bạn nhiều
IDM 5.18 http://tinyurl.com/pl2ejj | Quick Remove Malware http://tinyurl.com/lbbm9x - http://tinyurl.com/arna6g
[Up] [Print Copy]
  [Question]   Re: Vấn đề về Thuật toán so sánh tìm kiếm 17/04/2007 15:44:08 (+0700) | #10 | 54230
sugarpirog
Member

[Minus]    0    [Plus]
Joined: 20/05/2005 19:55:59
Messages: 35
Offline
[Profile] [PM]
Mặc dù topic nay cũ rồi nhưng mình có thể đóng góp thêm một cách nữa là sử dụng function Fìnd trong VBA với 2 vòng lặp với 2 tiêu thức tìm kiếm là CÔNG và THÀNH. Kết quả sẽ ra khi .row giông nhau.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|