Tôi muốn mở đầu này này câu hỏi tương tự, nhưng câu hỏi của tôi không liên quan đến tính ngẫu nhiên, chỉ định mệnh khó tính, vì vậy câu trả lời của "sử dụng một hạt giống nổi tiếng" không thực sự áp dụng. Tương tự như vậy, này câu hỏi tương tự, nhưng một lần nữa, tôi không hy vọng các thuật toán để bao giờ thất bại - Tôi chỉ không biết cách nào nó sẽ được chính xác.
Câu hỏi này xuất hiện trong khi thử nghiệm các thuật toán đồ thị. nhưng không có nghĩa là giới hạn đối với họ. Một số thuật toán như A * có thể có nhiều câu trả lời đúng. Tùy thuộc vào việc thực hiện chính xác của bạn, bạn có thể nhận được bất kỳ một trong số các câu trả lời, mỗi câu trả lời đều đúng như nhau. Tuy nhiên, điều này có thể khiến chúng khó kiểm tra vì bạn không biết cái nào sẽ nhổ ra trước thời hạn và sẽ rất tốn thời gian để tính toán các câu trả lời bằng tay.
Trong trường hợp cụ thể của tôi, tôi đã khắc phục nó bằng cách sửa đổi Floyd-Warshall để nhổ ra mọi con đường ngắn nhất có thể , và dành thời gian thử nghiệm điều đó. Nó có lợi ích là một tính năng tốt theo đúng nghĩa của nó. Sau đó, tôi có thể kiểm tra các hàm khác theo các đường dẫn chính xác đã biết từ FW (nếu đường dẫn được trả về là một trong những đường dẫn được FW trả về cho cặp bắt đầu / kết thúc đó, thì đó là chính xác). Tất nhiên, điều này chỉ hoạt động đối với các biểu đồ dày đặc do cách FW hoạt động, nhưng nó vẫn tốt.
Tuy nhiên, điều đó có thể không phải lúc nào cũng khả thi đối với tất cả các thuật toán có đặc tính này. Cho đến nay, câu trả lời tốt nhất mà tôi đã đưa ra là kiểm tra các đặc điểm của một câu trả lời đúng hơn là câu trả lời đúng. Để quay lại các thuật toán đường dẫn ngắn nhất, bạn có thể kiểm tra chi phí của đường dẫn được trả về so với chi phí đúng đã biết và đảm bảo đường dẫn hợp lệ.
Điều này hoạt động, nhưng nó có thể có nguy cơ không xác minh chính xác mọi thứ, càng có nhiều tiêu chí cho tính chính xác, đặc biệt là nếu việc xác minh là phức tạp (ví dụ trong khi thuật toán chính xác tồn tại , xác minh cây bao trùm tối thiểu là một vấn đề khó khăn đã biết; tự xây dựng MST), trong trường hợp đó bạn phải kiểm tra rộng rãi mã kiểm tra của mình. Tồi tệ hơn: có lẽ bạn phải xây dựng MST để kiểm tra thuật toán xác minh MST để bây giờ bạn có một kịch bản tuyệt vời khi kiểm tra MST của bạn phụ thuộc vào thuật toán xác minh MST của bạn hoạt động và kiểm tra thuật toán xác minh MST của bạn phụ thuộc vào mã tạo MST của bạn hoạt động.
Cuối cùng, có "cách rẻ tiền", bao gồm quan sát đầu ra, xác minh bằng tay, sau đó mã hóa bài kiểm tra để kiểm tra đầu ra mà bạn vừa xác minh, nhưng đó không phải là ý tưởng hay vì bạn có thể phải xem lại bài kiểm tra mỗi khi bạn thay đổi việc thực hiện một chút (đó là những gì kiểm tra tự động được cho là nên tránh).
Rõ ràng câu trả lời phụ thuộc vào thuật toán chính xác mà bạn đang kiểm tra ở một mức độ nào đó, nhưng tôi đã tự hỏi liệu có "thực tiễn tốt nhất" nào để xác minh các thuật toán có một số đầu ra "chính xác" xác định, xác định hay không, nhưng những đầu ra chính xác đó rất khó biết trước thời hạn và có thể khó xác minh sau khi thực tế.