Итак, у меня есть два массива, каждый из которых представляет собой простой замкнутый многоугольник в виде пройденного массива точек. Последний элемент совпадает с первым элементом. Я реализую равный алгоритм для любых 2 простых замкнутых многоугольников.Является ли этот алгоритм хорошим способом определить, имеют ли два массива одинаковое содержимое в одном порядке?
Array A would be like this [pnt1, pnt2, pnt3, pnt4, pnt5, pnt6, pnt1]
Array B would be like this [pnt2, pnt3, pnt4, pnt5, pnt6, pnt1, pnt2]
Array C would be like this [pnt2, pnt1, pnt6, pnt5, pnt4, pnt3, pnt2]
Array D would be like this [pnt1, pnt2, pnt3, pnt5, pnt6, pnt4, pnt1]
Массивы A и B равны, потому что точки находятся в одном порядке и одинаковых точках. Массивы A и C равны, потому что точки находятся в одном порядке (но наоборот), а также B и C по той же причине.
Массив D не равен ни одному из других массивов, поскольку обход точки не соответствует порядку.
Так мой алгоритм выглядит следующим образом:
1) сравнивает длины массивов, должен содержать то же # элементов - постоянное время
2) найти [0] в B набора как K - линейный поиск , линейное время
3) увидеть, если а [1] = в [K + 1] и так далее до A [N], линейное время
естественно индексы будут обернуть вокруг конца массива, возможно, через оператор мод.
Есть ли алгоритм, который может сделать лучше, чем это?
Я не думаю, что алгоритм обнаруживает, что A и C являются одинаковыми, но наоборот. –
@Bill True, мне нужно будет либо вызвать его дважды (реверсивный второй аргумент), если он не сработает, либо адаптирует внутренний цикл. –
Можете ли вы гарантировать, что точка не встречается более одного раза в полигоне? Если нет, ваш алгоритм может дать ложные отрицания. – Weeble