Я сделал код для реализации алгоритма Graham Scan выпуклой оболочки. Я протестировал программу, создав несколько тестовых случаев. Во всех случаях дает точный результат. Но мой вопрос в том, можно ли сгенерировать несколько сложных тестовых случаев, когда программа может не выдать идеальную выпуклую оболочку в качестве вывода? Какова процедура генерации таких случаев?
Анализ алгоритма сканирования Грэма выпуклой оболочки
Ответы (1)
Как ответил Саша в комментарии, невозможно помочь вам создать сложные тестовые примеры или узнать, возможно ли это, не зная, как вы реализовали алгоритм.
Сам алгоритм, конечно же, доказал свою правильность и решил проблему. Таким образом, речь идет только о тестировании того, что ваша реализация делает то, что говорит алгоритм.
Я бы предложил попробовать доказать себе свою реализацию - доказать, что вы получаете правильную точку в качестве отправной точки, доказать, почему вычисления, которые вы делаете для сортировки, дают правильный порядок сортировки по углу, доказать, что вычисления, на основе которых принимается решение отбросить точку или продолжить основано на эквивалентности (или непосредственном выяснении) вопроса о повороте направо или налево и доказать, что каждый шаг алгоритма выполняется в вашей реализации.
Все эти доказательства можно выполнить дважды: один раз теоретически, а затем с помощью тестовых кодов, которые будут нацелены на конкретные вопросы с построенными для них тестовыми примерами (например, чтобы проверить, правильно ли выполняются расчеты правого/левого поворота, которые вы не выполняете). нужна остальная часть алгоритма - просто протестируйте множество наборов из 3 точек с каждым возможным созвездием против известного правильного результата, чтобы проверить, дает ли расчет, который вы используете, правильный ответ).