Бих искал да знам сложността в нотацията Big O на класовете STL multiset, map и hash map, когато:
- вмъкване на записи
- достъп до записи
- извличане на записи
- сравняване на записи
Бих искал да знам сложността в нотацията Big O на класовете STL multiset, map и hash map, когато:
Те се изпълняват с помощта на червено-черно дърво, тип балансирано двоично дърво за търсене. Те имат следните асимптотични времена на изпълнение:
Вмъкване: O(log n)
Търсене: O(log n)
Изтриване: O(log n)
Те се реализират с помощта на хеш таблици. Те имат следните времена на изпълнение:
Вмъкване: O(1) очаквано, O(n) най-лош случай
Търсене: O(1) очаквано, O(n) най-лош случай
Изтриване: O(1) очаквано, O(n) най-лош случай
Ако използвате правилна хеш функция, почти никога няма да видите най-лошия случай на поведение, но е нещо, което трябва да имате предвид — вижте Отказ на услуга чрез атаки за алгоритмична сложност от Кросби и Уолах за пример за това.
hash_*
, отнася ли се за C++11 unordered и Boost.Unordered контейнери?
- person myWallJSON; 11.12.2011
hash_*
са част от Silicon Graphics STL. Те бяха включени в ревизията на C++11 под unordered_*
имена (unordered_map, unordered_set и т.н.) Освен това те бяха включени в библиотеките libstdc++, Visual C++ и Boost C++.
- person milpita; 20.09.2016