Page 2 of 4
Trước hết, mình sẽ đặt một câu hỏi cho các bạn. Liệu với một mảng không được sắp xếp, ta có biết được kết quả trả về sẽ “sai” như thế nào không?
Một mảng ví dụ cho các bạn:
[10,5,30,25,20,15]
Yêu cầu là ta cần tìm vị trí “sai” của số 15 với hàm =MATCH(15,mảng_trên,1)
Đáp án ở đây là 2, và tại sao lại như vậy? Các bạn hãy nhớ nguyên tắc của Binary Search nhé.
Các bước cụ thể:
Đầu tiên, Excel sẽ đánh số thứ tự các phần tử trong mảng
1 | 2 | 3 | 4 | 5 | 6 |
10 | 5 | 30 | 25 | 20 | 15 |
Và bởi Binary Search sẽ bắt đầu với vị trí ở giữa hoặc làm tròn xuống, ta có vị trí bắt đầu là vị trí số 3. Tại đây, Excel sẽ chèn giá trị tìm kiếm vào ngay sau vị trí tìm kiếm:
1 | 2 | 3 | * | 4 | 5 | 6 |
10 | 5 | 30 | 15 | 25 | 20 | 15 |
Bởi 15 < 30, Binary Search sẽ tiếp tục ở bên mảng trái. Và bởi (2+1)/2 làm tròn xuống = 1, giá trị được so sánh sẽ nằm ở vị trí thứ nhất, giá trị tìm kiếm đặt ở sau.
1 | * | 2 | 3 | 4 | 5 | 6 |
10 | 15 | 5 | 30 | 25 | 20 | 15 |
Bởi 10 < 15, nên Binary Search sẽ tìm về bên phải. Lúc này giá trị tìm kiếm sẽ di chuyển sang bên phải. Lúc này ta chỉ còn 1 cột ở vị trí 2:
1 | 2 | * | 3 | 4 | 5 | 6 |
10 | 5 | 15 | 30 | 25 | 20 | 15 |
Bởi 5 < 15 và không còn nơi nào để di chuyển, giá trị trả về sẽ là 2.
Trong trường hợp ta thay 5 tại vị trí 2 bằng một số bất kỳ lớn hơn 15, chẳng hạn 100, kết quả trả về sẽ là 1. Bởi khi đó, 10 sẽ là số nhỏ hơn gần nhất với 15.
Áp dụng vào trong Excel, giờ mình có một ảnh như này, các bạn đã hiểu tại sao kết quả của hàm MATCH lại trả về như vậy chưa nào?