Вы пытаетесь вычесть ссылки типа Object
.
Ваш тип элемента должен реализовать Comparable
:
public class ListElement<T extends Comparable<T>> implements Comparable<ListElement<T>> {
public T wert;
public ListElement<T> nachFolger;
public ListElement(T wert, ListElement<T> nachFolger) {
this.wert=wert;
this.nachFolger=nachFolger;
}
@Override
public int compareTo(ListElement<T> a) {
return wert.compareTo(a.wert);
}
}
Я полагаю, что регулярные пять указали, что звезда (например, с чередованием точек, имеющих коллинеарные сегменты), является контрпримером, который Вы ищете.
Редактирование в ответ на комментарии
В свете моего пересмотренного понимания, пересмотренного ответа: попробуйте звезду острых пяти, на которую указывают (например, один руками, достаточно узкими, что только три точки, включающие руку напротив отраженной точки, Вы продолжаете работать, в диапазоне, рассмотренном "хорошие отраженные вопросы"). По крайней мере, рабочий через него на бумаге он, кажется, дает больше, чем оптимальное. Однако заключительное чтение Вашего кода имеет меня удивление: под чем Вы подразумеваете "самый близкий" (т.е. самый близкий к какой)?
Примечание:
Даже при том, что мой ответ был принят, это не встречный пример, мы первоначально думали. Как @Mark указывает в комментариях, он идет от четыре до пять в точно то же время, как оптимальное делает.
Триггер, вьетнамка
На дальнейшем отражении я думаю, что был прав, в конце концов. Оптимальное, связанное четыре, может быть сохранено в острой звезде путем простого уверения, что одна пара рук имеет коллинеарные края. Но алгоритм находит пять, даже с патчем.
Я получаю это:
удаление мертвой ссылки ImageShack
Когда оптимальное является этим:
удаление мертвой ссылки ImageShack
Я думаю, что Ваш алгоритм не может быть оптимальным, потому что он делает нет смысла в любой мере оптимальности. Вы используете другие метрики как 'самые близкие' вершины, и проверяющий на 'необходимые' диагонали.
Для разъединения между Вашим и оптимальным алгоритмом мы должны использовать тот разрыв путем поиска форм с близкими вершинами, которые разложились бы плохо. Например (игнорируют строки, я нашел это на intertubenet):
У Вас нет защиты от наиболее центральной точки, соединяемой через вогнутый 'разрыв', который является внешним к полигону.
Ваш алгоритм также довольно сложен, и может переусердствовать его - точно так же, как сложный код, можно найти ошибки в нем, потому что сложный код делает сложные предположения.
Полагайте, что более обширный начальный этап повреждает форму в больше, более простые формы - как треугольники - и затем итеративный или генетический алгоритм для переобъединения их. Вам будет нужен этап как это для объединения любых ненужных подразделений между выпуклыми уловками так или иначе, и к тому времени Вы, возможно, ограничили свои возможные разложения только субоптимальными решениями.
В предположении что-то как:
но вершине 5 нужно дать предпочтение, потому что 9 в диапазоне, данном 4-5 и 6-5
Что Вы сделали бы, если бы 4-5 и 6-5 были еще более выпуклыми так, чтобы 9 не лежал в их диапазоне? Затем по Вашим правилам правильный поступок состоял бы в том, чтобы соединиться 9 - 12, потому что 12 самая близкая отраженная вершина, которая была бы субоптимальной.
Нашли его :( Они на самом деле довольно очевидны.
* dead imageshack img *
Четырехлистный клевер не будет оптимальным, если разрешены точки Штейнера ... красные вершины могли быть связаны.
* dead imageshack img *
Это даже не будет оптимальным без очков Штейнера ... 5 можно подключить к 14, избавляя от необходимости 3-14, 3-12 и 5-12. два полигона лучше! Ой!