Я оптимизирую реализацию отсортированного LinkedList.Java: эффективно внедряется в LinkedList
Чтобы вставить элемент, я пересекаю список и сравниваю каждый элемент, пока у меня не будет правильный индекс, а затем разорвать цикл и вставить.
Я хотел бы знать, есть ли другой способ, в который я могу вставить элемент одновременно с перемещением списка, чтобы уменьшить вставку из O (n + (n, ограниченное размером()/2)), чтобы На).
A ListIterator почти то, что Im после из-за его метода add(), но, к сожалению, в случае, когда в списке есть элементы, равные вставке, вставка должна быть размещена после них в списке. Для реализации этого ListIterator нужен peek(), которого у него нет.
редактировать: У меня есть ответ, но добавит это в любом случае, так как много людей нету правильно понял: Я ищу точку вставки и вставки, которые в сочетании выше, чем О (п)
Почему вы не используете Multiset? – Alexander
Я не понимаю, почему итерация по списку и вставка после последнего элемента, который меньше или равен тому, который вставлен, будет иметь сложность больше, чем O (n). В связанном списке это просто повторяется, пока вы не найдете точку вставки (которая есть O (n)), а затем вставьте в эту точку (что является O (1)). – Thomas
Кроме того: почему вы не используете сбалансированное двоичное дерево вместо отсортированного связанного списка? Это должно снизить затраты на вставку до O (log (n)) (стоимость поиска в точке вставки). – Thomas