Имам известно объркване относно времената на изпълнение на операцията find_min на двоично дърво за търсене и двоична купчина. Разбирам, че връщането на min в двоична купчина е O(1) операция. Също така разбирам защо на теория връщането на минималния елемент в двоично дърво за търсене е операция O(log(N)). За моя голяма изненада, когато прочетох структурата на данните в C++ STL, документацията гласи, че връщането на итератор към първия елемент в картата (което е същото като връщането на минималния елемент) се случва в постоянно време! Това не трябва ли да се връща в логаритмично време? Имам нужда от някой, който да ми помогне да разбера какво прави C++ под капака, за да върне това в постоянно време. Тъй като тогава няма смисъл наистина да се използва двоична купчина в C++, структурата на данните на картата тогава ще поддържа извличане на min и max в постоянно време, изтриване и търсене в O(log(N)) и ще поддържа всичко сортирано. Това означава, че структурата на данните има предимствата както на BST, така и на Binary Heap, всички свързани в едно!
Имах спор за това с интервюиращ (всъщност спор), но се опитвах да му обясня, че в C++ връщането на min и max от map в C++ (което е самобалансиращо се двоично дърво за търсене) се случва в постоянно време. Той беше объркан и продължаваше да казва, че греша и че бинарният хийп е правилният начин. Разяснението ще бъде много оценено