나는 이러한 질문에 대해 인터넷 검색을 시도했지만 구체적인 대답을 찾을 수없는 것 같습니다. 내가 발견 한 대부분은 마스터 정리와 함께 증명을 사용하는 것이었지만, 나는 더 직관적으로 기억 될 수있는 평범한 영어로 무엇인가를 기대하고있다. 또한 나는 학교에 다니지 않고 있으며 이러한 질문은 인터뷰를위한 것입니다.힙합의 속도와 메모리 분석
MEMORY :
정확히 메모리 사용면에서 큰 O를 결정하는 데 의미 하는가 무엇? 예를 들어, n 개의 항목을 모두 저장해야 할 때 heapsort가 O (1) 메모리로 실행되는 것으로 간주되는 이유는 무엇입니까? 힙에 대해 하나의 구조 만 작성했기 때문입니까? 또는 크기를 알기 때문에 스택에 만들 수 있습니다. 항상 메모리 사용이 일정합니까?
SPEED :
원소를 첨가하는 것은 (1) 그러나 O (logn)에서 수행되는 침출 O에서 수행되는 경우 힙의 작성이 O (n)이 시간에 수행되는 방법? O (1)에서 삽입을하고 O (n)를 삽입 한 후 각 삽입이 O (logn)가 된 후에 여과하는 것을 의미하지 않을까요? 따라서 O (n) * O (logn) = O (nlogn)입니다. 나는 또한 힙 정렬의 대부분의 구현이 힙을 만들기 위해 침투하는 대신에 heapify 함수를 사용한다는 것을 알아 차렸습니까? heapify는 O (logn)에서 O (nlogn)이고 n (nlogn) + O (nlogn) = O (nlogn)에 n 개의 삽입을 사용하여 비교를 수행합니까? 첫 번째 방법은 작은 n을 사용하는 두 번째 방법보다 성능이 좋지 않습니까?
이런 종류의 것을 가정 해 보았습니다.하지만 O (1) 연산을 n 번 수행하면 O (n) 시간이되는 것은 사실입니까? 또는 n * O (1) = O (1)입니까?
메모리는 일반적으로 O (1) * 추가 * 메모리로 표시됩니다. 나는. 상수 메모리는 개체 자체를 소트하지 않습니다. 두 번째 질문은 [중복입니다] (http://stackoverflow.com/questions/9755721/build-heap-complexity). –
왜 O (1)입니까? 힙의 모든 n 항목에 대해 메모리를 할당해야합니다. O (n)가 아닌가? – mpellegr
"추가"라는 단어에 유의하십시오. 항목 자체의 메모리는 "추가"의 일부로 간주되지 않습니다. 누군가이 자동차가 2 만 달러가 들며 추가 1000 달러에 GPS 네비게이션이 추가 될 것이라고 말하는 사람이 있다고 상상해보십시오. 그리고 당신은 "2000 달러 밖에 할 수 없습니까? 그냥 차가 2 만 달러를 듭니다!"라고 말합니다. 2000 달러는 추가 요금입니다. 그것은 차 자체를 위해 20,000 달러의 기초 부담을 세지 않는다. 마찬가지로, O (1)은 추가 메모리 사용량이며 항목 자체에 대한 메모리는 계산하지 않습니다. –