Я следующий ADT (не отсортированный): List<Segment>
Алгоритм: Объединить перекрывающиеся сегменты
//direction is from 0 to 2pi
class Segment {
int start;
int end;
}
Они представляющие, например, такую ситуацию:
Как сделать фазу слияния (зеленая стрелка в примере)? Очевидно, мне нужно перебирать список и каждый сегмент по сравнению со всеми остальными сегментами, а для каждой пары, если возможно, сделать простой слияние (это легко). Но затем на второй итерации мне нужно как-то вернуться к началу списка и начать все заново и т. Д. Поэтому я изо всех сил пытаюсь найти способ сближения этого алгоритма.
EDIT: Сегменты могут быть circular- От 1.75pi к 0.5pi и т.д ...
Является ли ваш список заказанным или случайным? – Tim
Список случайно – michael
Круговое ли? То есть, у вас есть сегмент, начинающийся с 1,5pi, а затем переходе от 2pi до 0,5pi? – Petr