Tôi đang tìm "cách bạn tìm thấy" vì tôi không biết cách tiếp cận tìm sự phức tạp về thuật toán của chương trình.Độ phức tạp của thuật toán (Big-O) của trình giải Sudoku
Tôi đã viết một giải sudoku bằng java, mà không hiệu quả trong tâm trí (tôi muốn cố gắng làm cho nó hoạt động một cách đệ quy, mà tôi đã thành công với!)
Một số nền:
chiến lược của tôi sử dụng thụt lùi để xác định , đối với một câu đố Sudoku đã cho, câu đố chỉ có một giải pháp duy nhất hay không. Vì vậy, tôi về cơ bản đọc trong một câu đố nhất định, và giải quyết nó. Khi tôi tìm thấy một giải pháp, tôi không nhất thiết phải thực hiện, cần phải tiếp tục khám phá để có thêm giải pháp. Cuối cùng, một trong ba kết quả có thể xảy ra: câu đố không thể giải quyết được, câu đố có một giải pháp duy nhất, hoặc câu đố có nhiều giải pháp.
Chương trình của tôi đọc trong tọa độ câu đố từ tệp có một dòng cho mỗi chữ số nhất định, bao gồm hàng, cột và chữ số. Theo quy ước của riêng tôi, hình vuông trên bên trái của 7 được viết như 007.
Thực hiện:
tôi tải các giá trị trong, từ tập tin, và lưu trữ chúng trong một mảng 2-D tôi đi xuống mảng cho đến khi tôi tìm thấy một Blank (giá trị không thực hiện), và thiết lập nó để 1. Và kiểm tra cho bất kỳ xung đột (cho dù giá trị tôi nhập là hợp lệ hay không). Nếu có, tôi chuyển sang giá trị tiếp theo. Nếu không, tôi tăng giá trị lên 1, cho đến khi tôi tìm thấy một chữ số hoạt động hoặc nếu không có chữ số nào hoạt động (1 đến 9), tôi quay lại 1 bước về giá trị cuối cùng mà tôi đã điều chỉnh và tăng giá trị đó đệ quy). Tôi đã giải quyết xong khi tất cả 81 phần tử đã được lấp đầy, không có xung đột. Nếu tìm thấy bất kỳ giải pháp nào, tôi sẽ in chúng vào thiết bị đầu cuối. Nếu không, nếu tôi cố gắng "quay lại một bước" trên phần tử FIRST mà ban đầu tôi đã sửa đổi, điều đó có nghĩa là không có giải pháp nào.
Mức độ phức tạp của thuật toán chương trình của tôi như thế nào? Tôi nghĩ rằng nó có thể là tuyến tính [O (n)], nhưng tôi truy cập vào các mảng nhiều lần, vì vậy tôi không chắc chắn :(
Any help is appreciated
Nếu bạn đang sử dụng backtracking, sự phức tạp của bạn có thể là theo cấp số mũ-ish. I E. đối với mọi cử động được thực hiện, bạn sẽ tái phạm nhiều hơn hoặc ít hơn mọi động thái có thể có khác. – millimoose
Bạn có thể đăng mã của mình không? Hoặc chỉ là các phần liên quan của nó? –