Hiểu về tìm kiếm xấp xỉ trong Excel – một cách để tối ưu hóa tốc độ

Page 3 of 4

Tại sao tìm kiếm lại trả về giá trị cuối cùng?

Các bạn có biết ứng dụng kinh điển này của hàm LOOKUP không?

=LOOKUP(2,1/(điều kiện), mảng kết quả)

Hồi trước, ta sẽ hiểu đơn giản là hàm này sẽ lấy giá trị ở vị trí cuối cùng, so sang mảng kết quả rồi trả về giá trị tương ứng. Còn giờ hãy đào sâu hơn với câu hỏi, tại sao lại là giá trị cuối?

Hãy bắt đầu với 1/(điều kiện). Kết quả ở đây sẽ trả về một mảng bao gồm 2 giá trị: #DIV/0! và 1. Ví dụ:

{1;1;1;1;#DIV/0!;1;1;#DIV/0!;1}

Khi đưa vào hàm LOOKUP, ta sẽ viết lại công thức như sau:

=LOOKUP(2,{1;1;1;1;#DIV/0!;1;1;#DIV/0!;1},mảng kết quả)

Trước khi đọc tiếp, có một điều mình sẽ nói mà bỏ qua bước chứng minh: LOOKUP (và các hàm tìm kiếm sử dụng xấp xỉ) sẽ bỏ qua lỗi. Các bạn có thể tìm hiểu thông tin này trên các diễn đàn Excel, hoặc tự test xem nhé.

Vậy thì công thức trên sẽ được viết lại:

=LOOKUP(2,{1;1;1;1;1;1;1},mảng kết quả rút gọn theo)
hoặc
=LOOKUP(2,{1;1;1;1;<bỏ qua>;1;1;<bỏ qua>;1},mảng kết quả)
hoặc một logic nào đó khác

Tại sao lại “hoặc”? Bởi vì mình không biết cụ thể Microsoft thiết kế theo đường nào. Có rất nhiều cách để đạt được kết quả. Tuy vậy, nhìn chung chúng ta chỉ cần xử lý mảng bao gồm toàn số 1. Và bởi giá trị LOOKUP của chúng ta là 2, Binary Search sẽ liên tục duyệt tìm về nửa phải cho đến cuối và trả về giá trị ở vị trí cuối cùng. Các bạn có thể xem ảnh minh họa sau:

Nếu chúng ta tìm một số khác thì sao? – Miễn là số lớn hơn 1, ta sẽ luôn lấy được giá trị cuối cùng.

Vậy là, các bạn đã hiểu nguyên lý hoạt động case kinh điển với hàm LOOKUP trên rồi đúng không?

Tuy nhiên, có một điều rất thú vị ở đây, đó là với lookup_value = 1, hàm LOOKUP vẫn trả về vị trí cuối cùng.

Tại sao lại như vậy? Hãy đọc tiếp nhé!

Page

Tác giả: Minhlai

· · ·

Khóa học mới xuất bản