/codegym.vn/ - 145
1.
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++)
{
2.
if
(
value
===
array
[
i
])
{
3.
return
i
;
4.
}
5.
}
Lỗi thường gặp #2: Duyệt không đúng phần tử cuối cùng
Ví dụ:
1.
for
(
let
i
=
0
;
i
<=
array
.
length
;
i
++)
{
2.
if
(
value
===
array
[
i
])
{
3.
return
i
;
4.
}
5.
}
Đoạn mã trên sử dụng phép so sánh (<=) khiến cho vòng lặp duyệt quá số lượng
phần tử của mảng (bởi vì vị trí cuối cùng của mảng là array.length – 1 chứ không phải
là array.length). Có 2 cách khắc phục trong trường hợp này:
Cách 1: Sử dụng dấu (<) thay vì dấu (<=)
1.
for
(
let
i
=
0
;
i
<
array
.
length
;
i
++)
{
2.
if
(
value
===
array
[
i
])
{
3.
return
i
;
4.
}
5.
}
Cách 2: Chỉ duyệt đến array.length – 1 thay vì duyệt đến array.length
1.
for
(
let
i
=
0
;
i
<=
array
.
length
-
1
;
i
++)
{
2.
if
(
value
===
array
[
i
])
{
3.
return
i
;
4.
}
5.
}
Lỗi thường gặp #3: Sử dụng tìm kiếm nhị phân trên tập dữ liệu chưa được
sắp xếp
Lưu ý rằng thuật toán tìm kiếm nhị phân chỉ hoạt động đúng trên các tập dữ liệu đã
được sắp xếp. Do đó, nếu đầu vào là một tập dữ liệu chưa được sắp xếp thì chúng ta
có 2 lựa chọn:
● Sắp xếp dữ liệu trước khi áp dụng thuật toán tìm kiếm nhị phân
● Sử dụng thuật toán tìm kiếm tuyến tính thay cho thuật toán tìm kiếm nhị phân
Lỗi thường gặp #4: Thông báo sớm trong thuật toán tìm kiếm
Đoạn mã dưới đây là một tình huống khi viết chương trình tra từ điển.
1.
let
inpWord
=
prompt
(
"Nhập vào từ cần tra:"
);
2.
let
enWords
=
[
"Hello"
,
"Google"
,
"Code"
,
"Fun"
];
3.
let
viWords
=
[
"Xin chào"
,
"Google"
,
"Viết mã"
,
"Vui"
];
4.
5.
for
(
let
i
=
0
;
i
<
viWords
.
length
;
i
++)
{
6.
if
(
enWords
[
i
]
===
inpWord
)
{
7. alert
(
"Nghĩa của từ này là: "
+
viWords
[
i
]);
8.
}
else
{
9. alert
(
"Không tìm thấy từ này trong từ điển"
);