Cùng chỉ số là cùng một bản ghi
Kĩ thuật duyệt lần lượt kiểm tra dữ liệu trong miền tìm kiếm với điều kiện của bài toán. Cần biết đang tìm một kết quả, tất cả kết quả hay kết quả tốt nhất trước khi đặt cách dừng.
Ví dụ dùng dữ liệu điểm giả định, không phải hồ sơ học sinh thật. Bốn dãy names,B,C,D có cùng độ dài; mỗi chỉ số ứng với cùng một hàng:
| Mẫu | Toán B | Vật lí C | Hoá học D |
|---|---|---|---|
| A | 8,0 | 8,3 | 7,6 |
| B | 8,5 | 8,1 | 8,7 |
| C | 8,8 | 9,0 | 8,5 |
| D | 9,0 | 9,1 | 9,0 |
| E | 9,2 | 8,9 | 9,4 |
| F | 9,7 | 9,3 | 9,2 |
Tên được ghi “Mẫu A”,… trong mã. Nếu đổi thứ tự dữ liệu, phải giữ tên cùng các điểm của hàng ấy; không sắp xếp riêng từng môn rồi ghép lại theo chỉ số.
Tìm một có thể dừng khi đã thấy
```python
def first_math_above_physics(names, B, C, D):
for i in range(len(names)):
if B[i] > C[i]:
return names[i]
return None
```
Mẫu A không thỏa vì 8,0<8,3; Mẫu B thỏa8,5>8,1 nên hàm trả “Mẫu B” ngay ở lượt thứ hai. Nếu hết danh sách chưa thấy thì trả None. Thông tin “một mẫu thỏa” đã đủ; chưa cần tìm hết các mẫu khác.
Tìm tất cả phải giữ các kết quả còn lại
```python
def all_physics_above_chemistry(names, B, C, D):
result = []
for i in range(len(names)):
if C[i] > D[i]:
result.append(names[i])
return result
```
Kết quả theo thứ tự bảng là Mẫu A,C,D,F. Hàm tiếp tục sau khi thấy Mẫu A để không bỏ các mẫu phía sau. Dãy rỗng hoặc không có kết quả trả []. Chạy chế độ bang-diem trong tệp tải để đối chiếu cả hai yêu cầu.
Bài luyện
Tìm một mẫu có Toán > Vật lí bằng cách duyệt từ đầu bảng sẽ dừng ở đâu?
Mẫu B là hàng đầu tiên thỏa8,5>8,1.
8,0 không lớn hơn 8,3.
Mẫu B đã thỏa trước đó.
Yêu cầu tìm một cho phép dừng khi thấy.
Lời giải
Kiểm Mẫu A:8,0<8,3 nên tiếp tục. Kiểm Mẫu B:8,5>8,1 nên đã có một kết quả và có thể trả ngay.
Bài luyện
Tìm tất cả mẫu có Vật lí > Hoá học mà dừng sau Mẫu A sẽ bị gì?
Đây không phải thao tác của thuật toán.
Các hàng phía sau còn có điểm Vật lí lớn hơn Hoá học.
Một kết quả chưa đáp ứng yêu cầu tất cả.
Hàm cần tiếp tục kiểm điều kiện.
Lời giải
Mẫu A thỏa nhưng C,D,F cũng thỏa. Dừng ở kết quả đầu sẽ thiếu ba hàng; cần duyệt tiếp và thêm từng kết quả vào danh sách.
Bài luyện
Vì sao không sắp xếp riêng từng dãy điểm rồi dùng cùng chỉ số để lấy tên?
Tên mẫu chỉ làm nhãn dữ liệu.
Có thể sắp xếp nếu giữ đúng bản ghi đi cùng nhau.
Mối liên hệ giữa các cột phải được giữ khi đổi thứ tự.
Bài không có yêu cầu đó.
Lời giải
Cùng chỉ số ban đầu biểu diễn cùng một mẫu. Sắp xếp riêng từng cột phá mối liên hệ ấy; cần đổi thứ tự cả bản ghi hoặc giữ nhãn chỉ số chung.
Đang học