Я пытаюсь перечислить временные сложности операций с общими структурами данных, такими как массивы, двоичное дерево поиска, куча, связанный список и т. Д., И особенно я имею в виду Java. Они очень распространены, но я думаю, что некоторые из нас не уверены на 100% в точном ответе. Любая помощь, особенно ссылки, приветствуется.
Например, для односвязного списка: изменение внутреннего элемента - O (1). Как это сделать? Вы ДОЛЖНЫ выполнить поиск элемента перед его изменением. Кроме того, для вектора добавление внутреннего элемента задается как O (n). Но почему мы не можем сделать это за амортизированное постоянное время, используя индекс? Пожалуйста, поправьте меня, если я что-то упускаю.
Я публикую свои выводы / догадки в качестве первого ответа.
Ответы:
Массивы
Delete
операции с массивами недоступны. Мы можем символически удалить элемент, установив для него определенное значение, например -1, 0 и т. Д. В зависимости от наших требований.Insert
для массивов в основном,Set
как упоминалось в началеArrayList:
Связанный список:
Двусвязный список:
Стек:
Очередь / Deque / Круговая очередь:
Дерево двоичного поиска:
Красно-черное дерево:
Куча / PriorityQueue (мин. / Макс.):
HashMap / Hashtable / HashSet:
источник