Competitive Programming 4 (CP4) của Steven Halim, Felix Halim và Suhendry Effendy không đơn thuần là một tuyển tập thuật toán. Bộ sách được xây dựng như một bản đồ huấn luyện: đọc đề, nhận ra cấu trúc ẩn phía sau dữ liệu, đối chiếu giới hạn đầu vào, chọn cấu trúc dữ liệu hoặc mô hình giải phù hợp, rồi kiểm chứng lời giải bằng độ phức tạp và các trường hợp biên. Bản tiếng Việt 2026 gồm Tập 1 và Tập 2, tổng cộng 769 trang nội dung dịch, bao quát 9 chương từ kỹ năng thi đấu, cấu trúc dữ liệu, quy hoạch động và đồ thị đến toán học, chuỗi, hình học tính toán, luồng mạng và các chủ đề hiếm gặp.
Nếu từng rơi vào tình trạng “đã học thuật toán nhưng gặp đề vẫn không biết bắt đầu từ đâu”, giá trị lớn nhất của CP4 nằm đúng ở khoảng trống đó. Sách không chỉ trả lời thuật toán này hoạt động thế nào, mà còn liên tục gắn kỹ thuật với loại dữ liệu, quy mô đầu vào, dấu hiệu nhận dạng và nhóm bài luyện tương ứng. Nhờ vậy, người đọc có thể chuyển từ ghi nhớ rời rạc sang hình thành phản xạ giải bài.
CP4 có mật độ kiến thức cao. Cách dùng hiệu quả không phải đọc từ trang đầu đến trang cuối rồi mới luyện bài, mà là đọc theo vòng lặp: hiểu ý tưởng, tự cài đặt, nộp bài trên hệ thống chấm trực tuyến, xem lại lỗi và quay về đúng mục liên quan. Khi học theo cách này, mục lục chi tiết trở thành bản đồ định vị: đang yếu truy vấn đoạn thì quay lại cây Fenwick hoặc cây phân đoạn; chưa nhận ra trạng thái của bài thì rà lại các mẫu quy hoạch động; sai ở bài đồ thị có trọng số thì đối chiếu điều kiện dùng Dijkstra, Bellman–Ford hoặc Floyd–Warshall.
Điểm tạo cảm giác “sách của người từng thi đấu” là nội dung luôn hướng tới quyết định phải đưa ra trong thời gian hữu hạn. Người đọc được nhắc phải nhìn vào giới hạn thời gian, bộ nhớ và kích thước đầu vào trước khi viết mã; phân biệt lời giải đúng về ý tưởng với lời giải đủ nhanh để được chấp nhận; đồng thời chú ý đến kiểu dữ liệu, sai số số thực, chỉ số mảng và những trường hợp biên rất dễ làm mất điểm.
Trang chính thức của CP4 cho biết bộ sách được đúc kết từ kinh nghiệm giải hàng nghìn bài UVa và Kattis, cũng như quá trình các tác giả tham gia IOI và ICPC ở nhiều vai trò. Điều đó thể hiện rõ trong cách tổ chức kiến thức: mỗi nhóm kỹ thuật được nối với bài toán thực hành, thay vì dừng ở mô tả lý thuyết hoặc mã giả chung chung.
Một lời giải thi đấu tốt thường bắt đầu bằng chuỗi câu hỏi: dữ liệu lớn đến đâu; có cần trả lời nhiều truy vấn không; cấu trúc là dãy, cây hay đồ thị; bài toán có tính chất tối ưu con; lựa chọn cục bộ có dẫn đến tối ưu toàn cục; trạng thái có thể biểu diễn gọn hay không. CP4 giúp biến các câu hỏi này thành thói quen.
Thay vì “thấy quen thì dùng”, người học dần biết loại trừ lời giải bằng độ phức tạp. Tìm kiếm toàn bộ có thể phù hợp khi không gian nhỏ hoặc cắt tỉa tốt; tìm kiếm nhị phân chỉ có ý nghĩa khi tồn tại tính đơn điệu; tham lam cần lập luận đúng đắn; quy hoạch động cần xác định trạng thái, chuyển trạng thái và thứ tự tính. Đây là năng lực cốt lõi cho cả phòng thi lẫn phỏng vấn kỹ thuật.
Tập 1 gồm bốn chương đầu và nên được xem là phần bắt buộc với người mới bước vào lập trình thi đấu.
Sau Tập 1, người học chưa thể giải mọi bài khó, nhưng đã có một “hộp công cụ” đủ rộng để xử lý phần lớn bài nền tảng và hiểu vì sao một hướng giải thành công hoặc thất bại.
Tập 2 gồm năm chương còn lại, phù hợp khi người đọc đã quen với phân tích độ phức tạp, cấu trúc dữ liệu cơ bản, quy hoạch động nền tảng và đồ thị.
CP4 phát huy tốt nhất khi được mở cạnh trình soạn thảo mã và một hệ thống chấm bài. Sách cung cấp cách phân loại bài, gợi ý những bài đại diện và đặt kiến thức vào bối cảnh UVa, Kattis cùng các kỳ thi thuật toán. Nhờ đó, người đọc có thể kiểm tra ngay mình đã thực sự hiểu hay mới chỉ thấy lời giải “có vẻ hợp lý”.
Quá trình nộp bài còn rèn những kỹ năng mà việc đọc thuần túy không tạo ra được: phát hiện lỗi ngoài ý muốn, tối ưu thao tác tốn thời gian, chọn kiểu số đủ lớn, xử lý đầu vào đặc biệt và thiết kế bộ kiểm thử phản ví dụ. Đây cũng là lý do CP4 phù hợp với huấn luyện dài hạn hơn một cuốn “tóm tắt công thức”.
Nguồn chính thức của CP4 sử dụng C++17 làm ngôn ngữ chính, bên cạnh Python 3, Java 11 và OCaml. Việc dùng mã thực giúp người đọc quan sát không chỉ ý tưởng thuật toán mà cả cách biểu diễn dữ liệu, tổ chức vòng lặp, sử dụng thư viện và quản lý độ phức tạp trong chương trình hoàn chỉnh.
Expert Version của sản phẩm có Code Companion theo từng tập. Phần này thuận tiện khi cần mở song song nội dung giải thích và mã tham khảo, hoặc khi muốn ôn nhanh mẫu cài đặt trước một buổi luyện. Tuy vậy, cách học tốt nhất vẫn là tự viết trước, chỉ đối chiếu Code Companion sau khi đã thử giải để tránh biến việc học thành sao chép mã.
Với học sinh chuyên Tin, Tập 1 giúp dựng nền theo hướng IOI và các kỳ thi học sinh giỏi. Với sinh viên ICPC, cả hai tập tạo khung kiến thức rộng hơn cho vòng khu vực và những bài cần kết hợp nhiều kỹ thuật. Với lập trình viên, các chương về cấu trúc dữ liệu, tìm kiếm, quy hoạch động, đồ thị và chuỗi hỗ trợ luyện phỏng vấn thuật toán; còn phần nâng cao đóng vai trò mở rộng tư duy.
Giáo viên và huấn luyện viên có thể dùng mục lục như khung chương trình: chia chủ đề theo tuần, chọn bài đại diện, thiết kế buổi chữa bài và xác định kiến thức tiên quyết. Người đã có kinh nghiệm lại có thể dùng CP4 như tài liệu tra cứu thay vì học tuần tự.
CP4 không phải giáo trình dạy lập trình từ con số 0. Người đọc nên biết ít nhất một ngôn ngữ lập trình, hiểu biến, điều kiện, vòng lặp, hàm, mảng và có thể tự chạy một chương trình. Bộ sách cũng không bảo đảm thành tích thi đấu chỉ bằng việc đọc; trực giác chỉ hình thành sau quá trình tự giải và sửa nhiều bài.
Mật độ kiến thức dày có thể gây quá tải nếu cố học mọi chủ đề cùng lúc. Người mới nên ưu tiên Tập 1, đặc biệt là Chương 1 đến Chương 4; chỉ chuyển sang phần chuyên sâu của Tập 2 khi đã tự cài đặt được các thuật toán nền tảng và giải được bài ở mức phù hợp.
Chu trình này biến mỗi bài giải thành một đơn vị kinh nghiệm có thể tái sử dụng. Sau một thời gian, người học không chỉ nhớ tên thuật toán mà còn biết điều kiện để tin rằng mình đang dùng đúng công cụ.
Có, nếu người đọc đã biết lập trình cơ bản. Tập 1 bắt đầu bằng kỹ năng thi đấu và các công cụ nền tảng, nhưng sách không thay thế một khóa học nhập môn ngôn ngữ lập trình. Nếu chưa quen biến, vòng lặp, hàm và mảng, nên học các nội dung đó trước.
Tập 1 tập trung vào nhập môn lập trình thi đấu, cấu trúc dữ liệu, các mô hình giải bài và đồ thị. Tập 2 mở rộng sang toán học, xử lý chuỗi, hình học tính toán, luồng mạng, quy hoạch động nâng cao và các chủ đề hiếm gặp. Người mới nên học Tập 1 trước.
Phần nội dung dịch của bộ hai tập có tổng cộng 769 trang: Tập 1 gồm 353 trang và Tập 2 gồm 416 trang. File Expert Version đóng quyển lần lượt có 357 và 420 trang do tính thêm phần bìa.
Theo trang chính thức, sách sử dụng C++17 làm ngôn ngữ chính, đồng thời có nội dung minh họa bằng Python 3, Java 11 và OCaml. Tư duy thuật toán trong sách vẫn có thể áp dụng khi người đọc dùng ngôn ngữ khác.
Có. Nhóm tác giả xác định Tập 1 phù hợp với phần lớn nền tảng dành cho học sinh hướng IOI, còn bộ Tập 1 và Tập 2 mở rộng phạm vi kiến thức cần thiết cho sinh viên thi ICPC. Thành tích vẫn phụ thuộc vào số lượng và chất lượng bài luyện thực tế.
Có, đặc biệt ở các phần cấu trúc dữ liệu, phân tích độ phức tạp, tìm kiếm, tham lam, quy hoạch động, cây, đồ thị và chuỗi. Tuy nhiên, CP4 rộng và thiên về lập trình thi đấu, nên người cần phỏng vấn gấp nên học có chọn lọc thay vì cố đọc toàn bộ.
Code Companion tách phần mã tham khảo theo Tập 1 và Tập 2 để người học mở song song khi đọc, kiểm tra mẫu cài đặt và ôn nhanh. Nên dùng sau khi đã tự viết hoặc tự phân tích để giữ hiệu quả rèn tư duy.
Có. Sản phẩm được tặng kèm eBook tiếng Anh, hữu ích khi cần đối chiếu thuật ngữ chuyên ngành, tên thuật toán và nội dung gốc.
89ebook áp dụng chính sách đổi mới 1 đổi 1 trong 90 ngày kể từ ngày nhận sách đối với lỗi in ấn thuộc phạm vi bảo hành.