Thứ tự phải gắn với điều kiện dùng để loại
Trong bảng bài trước, dãy điểm Toán B đã không giảm. Để tìm tất cả mẫu có cả ba điểm >=9, có thể duyệt từ cuối về đầu. Khi gặp B[i]<9, các điểm Toán còn lại phía trước đều <=B[i]<9; không mẫu nào trong phần ấy thỏa cả ba điều kiện, nên được dừng.
Nếu chỉ C[i]<9 hoặc D[i]<9 thì mới loại được hàng đang xét. Hai dãy ấy chưa được sắp xếp, nên không đủ căn cứ bỏ các hàng còn lại.
Chỉ break theo điểm Toán đã có thứ tự
```python
def all_at_least_nine(names, B, C, D):
result = []
for i in range(len(names) - 1, -1, -1):
if B[i] < 9:
break
if C[i] >= 9 and D[i] >= 9:
result.append(names[i])
return result
```
Với bảng mẫu: xét F và lấy F; xét E nhưng bỏ vì Vật lí 8,9; xét D và lấy D; xét C thấy Toán 8,8<9 thì dừng. Có4 lượt kiểm hàng, kết quả theo chiều duyệt là [Mẫu F,Mẫu D]. Không nói tìm tất cả lúc nào cũng phải đọc cả danh sách khi đã chứng minh phần còn lại không thể thỏa.
Cần B không giảm và bốn dãy tương ứng trước khi dùng mã. B không giảm chưa làm điều kiện Toán > Vật lí hoặc tổng điểm trở thành một dãy có thứ tự để tìm nhị phân.
Bài luyện
Vì sao gặp Toán 8,8 ở Mẫu C khi duyệt ngược thì được dừng?
Chỉ cột Toán được sắp xếp.
Yêu cầu vẫn là tìm tất cả mẫu hợp lệ.
Phía trước còn A và B nhưng đã có thể loại theo điểm Toán.
Thứ tự B cung cấp căn cứ loại phần còn lại.
Lời giải
B không giảm nên khi đi ngược, các giá trị chưa xét không lớn hơn 8,8. Chỉ điều kiện Toán đã thất bại với mọi hàng ấy, nên không thể thỏa đồng thời cả ba điểm>=9.
Bài luyện
Vì sao không dừng ngay ở Mẫu E có Vật lí 8,9?
Điểm Vật lí không có thứ tự để loại phần phía trước.
8,9<9.
Mẫu E cần bỏ khỏi kết quả.
B đã không giảm như điều kiện bài.
Lời giải
E không đạt điều kiện nhưng D có 9,0;9,1;9,0. Chỉ bỏ E rồi tiếp tục; dừng theo một cột chưa có thứ tự sẽ làm thiếu D.
Bài luyện
Mã trên với bảng sáu mẫu có bao nhiêu lượt kiểm hàng?
Các hàng A,B đã được loại nhờ thứ tự Toán.
Lần lượt kiểm F,E,D,C rồi break.
2 là số mẫu được nhận, khác số lượt kiểm.
Còn phải kiểm C để biết nên dừng.
Lời giải
F,E,D đều được xét; vòng tiếp theo xét C và phát hiện B[i]<9. Tính cả lượt phát hiện điều kiện dừng là 4 lượt.
Đang học