Thư Viện Câu Hỏi Phỏng Vấn
Tổng hợp các câu hỏi tuyển dụng thực tế theo nhiều cấp độ từ Entry đến Expert để bạn tự tin chinh phục nhà tuyển dụng.
Thuật toán Dijkstra tìm đường đi ngắn nhất hoạt động như thế nào? Điều kiện áp dụng là gì?
Thuật toán Dijkstra dùng để tìm đường đi ngắn nhất từ một đỉnh nguồn đến tất cả các đỉnh khác trên đồ thị có trọng số:
- Cơ chế: Sử dụng một hàng đợi ưu tiên (Priority Queue / Min-Heap) để liên tục chọn đỉnh có khoảng cách ngắn nhất chưa được tối ưu từ đỉnh nguồn, sau đó cập nhật khoảng cách tới các đỉnh kề với nó (quá trình Relax).
- Độ phức tạp: Sử dụng Min-Heap giúp thuật toán đạt hiệu năng O((V + E) log V) với V là số đỉnh và E là số cạnh.
- Điều kiện: Trọng số của tất cả các cạnh phải không âm (non-negative). Nếu đồ thị có cạnh âm, ta bắt buộc phải sử dụng thuật toán Bellman-Ford để tránh rơi vào vòng lặp vô hạn.
Làm thế nào để phát hiện chu trình (cycle) trong đồ thị có hướng (Directed Graph)?
Có thể sử dụng thuật toán duyệt đồ thị DFS (Depth-First Search) kết hợp kỹ thuật tô màu các đỉnh (hoặc sử dụng Recursion Stack):
- Trạng thái 3 màu:
- Trắng (Unvisited): Đỉnh chưa được duyệt.
- Xám (Visiting): Đỉnh đang nằm trong nhánh đệ quy hiện tại (chưa duyệt xong các đỉnh kề).
- Đen (Visited): Đỉnh và toàn bộ các đỉnh kề của nó đã duyệt xong.
- Phát hiện chu trình: Trong quá trình duyệt DFS, nếu gặp một đỉnh kề đang ở trạng thái Xám, điều đó có nghĩa là có một cạnh ngược (back edge) trỏ về tổ tiên của nó trên nhánh đệ quy, tức là đồ thị tồn tại chu trình.
Làm thế nào để triển khai và tối ưu hóa thuật toán hoặc cấu trúc dữ liệu liên quan đến Topological Sort trong chủ đề Graph Theory?
Trong lập trình giải thuật với Graph Theory, việc làm chủ Topological Sort yêu cầu lập trình viên hiểu rõ cấu trúc vật lý trong bộ nhớ và độ phức tạp tính toán:
- Độ phức tạp: Luôn đánh giá Time Complexity (thời gian) và Space Complexity (không gian) tối ưu nhất (ví dụ: tối ưu từ O(n^2) xuống O(n log n)).
- Trường hợp biên (Edge Cases): Xử lý kỹ các giá trị null, mảng rỗng, giá trị giới hạn cực đại/cực tiểu của kiểu dữ liệu.
- Mã nguồn mẫu: Triển khai giải pháp rõ ràng, súc tích bằng các cấu trúc dữ liệu cơ bản, tránh lạm dụng bộ nhớ phụ khi không cần thiết.
Làm thế nào để triển khai và tối ưu hóa thuật toán hoặc cấu trúc dữ liệu liên quan đến Topological Sort trong chủ đề Graph Theory?
Trong lập trình giải thuật với Graph Theory, việc làm chủ Topological Sort yêu cầu lập trình viên hiểu rõ cấu trúc vật lý trong bộ nhớ và độ phức tạp tính toán:
- Độ phức tạp: Luôn đánh giá Time Complexity (thời gian) và Space Complexity (không gian) tối ưu nhất (ví dụ: tối ưu từ O(n^2) xuống O(n log n)).
- Trường hợp biên (Edge Cases): Xử lý kỹ các giá trị null, mảng rỗng, giá trị giới hạn cực đại/cực tiểu của kiểu dữ liệu.
- Mã nguồn mẫu: Triển khai giải pháp rõ ràng, súc tích bằng các cấu trúc dữ liệu cơ bản, tránh lạm dụng bộ nhớ phụ khi không cần thiết.
Làm thế nào để triển khai và tối ưu hóa thuật toán hoặc cấu trúc dữ liệu liên quan đến Topological Sort trong chủ đề Graph Theory?
Trong lập trình giải thuật với Graph Theory, việc làm chủ Topological Sort yêu cầu lập trình viên hiểu rõ cấu trúc vật lý trong bộ nhớ và độ phức tạp tính toán:
- Độ phức tạp: Luôn đánh giá Time Complexity (thời gian) và Space Complexity (không gian) tối ưu nhất (ví dụ: tối ưu từ O(n^2) xuống O(n log n)).
- Trường hợp biên (Edge Cases): Xử lý kỹ các giá trị null, mảng rỗng, giá trị giới hạn cực đại/cực tiểu của kiểu dữ liệu.
- Mã nguồn mẫu: Triển khai giải pháp rõ ràng, súc tích bằng các cấu trúc dữ liệu cơ bản, tránh lạm dụng bộ nhớ phụ khi không cần thiết.



.png)
.png)