문제

에 따라 위키 문서에 연결된 목록, 삽입하는 중동에서의 연결 목록으로 간주됩 O(1).내가 될 것이라고 생각 O(n).지 않을 것을 찾아야 하는 노드가 될 수 있는 거의 끝나지 않을까요?

이 분석 대의 노드 작업(지만 그것이 필요합니다)및 그냥 삽입가?

편집:

링크 목록에 비해 여러 가지 장점을 가지고 있 배열입니다.의 삽입하는 요소에서 특정 시점의 목록은 일정한 시간 운영,반면에 삽입하는 배열을 이동해야 할 수도 있습니다 절반의 요소,또는 더 있습니다.

위의 문장은 오해의 소지가 나입니다.올바른 경우,그러나 내가 생각하는 결론에 이어야 한다:

배열:

  • 찾는 시점의 삽입/삭제 O(1)
  • 을 수행하 삽입/삭제 O(n)

링크 목록:

  • 찾는 시점의 삽입/삭제 O(n)
  • 을 수행하 삽입/삭제 O(1)

내가 생각하는 시간은 당신을 찾지 않아도 되는 위치를 유지한 경우 어떤 종류의 그것의 포인터를(으로 머리로 꼬리에 어떤 경우).그래서 우리가 할 수 없는 단호하게 말하는 링크 목록 항상 치열한 삽입/삭제 옵션이 있습니다.

도움이 되었습니까?

해결책

이 기사는 "색인"을 별도의 작업으로 간주합니다. 따라서 삽입 자체는 O (1)이지만 중간 노드에 도달하는 것은 O (n)입니다.

다른 팁

삽입 자체는 O (1)입니다. 노드 찾기는 O (n)입니다.

아니요, 삽입하려고한다고 결정하면 이미 목록을 반복하는 중간에 있다고 가정합니다.

링크 된 목록의 작업은 종종 일반적인 "목록"으로 취급되지 않고 노드 모음 (기본 루프의 반복자로서 노드 자체를 생각하는 방식으로 수행됩니다. 따라서 목록을 찌르면서 비즈니스 로직의 일부로 새 노드를 추가해야한다는 사실을 알 수 있습니다 (또는 이전 노드가 삭제되어 있음). 단일 반복에 50 개의 노드를 추가 할 수 있으며 해당 각 노드는 O (1) 두 개의 인접한 노드를 풀고 새 노드를 삽입 할 시간입니다.

편집 : Man, 당신은 두 번째 단락을 입력하고 첫 번째 응답자 대신 갑자기 첫 번째 4와 똑같은 것을 말합니다!

차트가 표시하는 배열과 비교할 목적으로 새 노드 후 모든 항목을 이동할 필요는 없기 때문에 O (1)입니다.

그렇습니다. 그들은 당신이 이미 해당 노드에 대한 포인터를 가지고 있거나 포인터를 얻는 것이 사소한 것이라고 가정합니다. 다시 말해, 문제는 다음과 같습니다. "x에서 주어진 노드,이 노드 이후에 삽입 할 코드는 무엇입니까? "삽입 지점에서 시작하게됩니다.

링크 된 목록에 삽입하는 것은 반복하는 것과 다릅니다. 항목을 찾지 않고 항목을 거기에 넣기 위해 포인터를 재설정하고 있습니다. 프론트 엔드 근처 또는 끝 근처에 삽입 될지 여부는 중요하지 않으며, 삽입에는 포인터가 재 할당됩니다. 물론 구현 방법에 따라 다르지만 목록의 강점입니다. 쉽게 삽입 할 수 있습니다. 인덱스를 통해 액세스하는 것은 배열이 비추는 곳입니다. 그러나 목록의 경우 일반적으로 N 번째 항목을 찾는 것이 O (n)입니다. 적어도 그게 제가 학교에서 기억하는 것입니다.

루핑이 포함되지 않기 때문입니다.

삽입은 다음과 같습니다.

  • 요소 삽입
  • 이전에 링크
  • 다음으로 링크
  • 완료

어쨌든 이것은 일정한 시간입니다.

결과적으로, 다른 하나 후에 n 요소를 삽입하는 것은 O (n)이다.

이 분석은 노드 작동 (필요하지만)과 삽입 자체만을 찾는 것을 설명하지 않습니까?

맞아요. 주어진 지점에서 삽입은 이미 다음에 삽입하려는 항목에 대한 포인터를 보유하고 있다고 가정합니다.

InsertItem(item * newItem, item * afterItem)

삽입은 O (1) 어디에 있는지 알게되면

아니요, 검색을 설명하지 않습니다. 그러나 이미 목록의 중간에 항목에 대한 포인터가 이미 있다면 해당 시점에서 삽입하는 것은 O (1)입니다.

검색 해야하는 경우 검색 시간을 추가해야합니다. 이는 O (n)이어야합니다.

이 기사는 배열과 목록을 비교하는 것입니다. 배열과 목록 모두에 대한 삽입 위치를 찾는 것은 O (n)이므로 기사는 무시합니다.

o (1)은 새 항목을 삽입 할 항목이 있다는 사실에 따라 다릅니다. (전후). 당신이하지 않으면, 그것은 O (n)가 해당 항목을 찾아야합니다.

나는 그것이 당신이 O () 표기법에 대해 계산하기로 선택한 경우라고 생각합니다. 계산에 정규 작업을 삽입하는 경우 복사 작업입니다. 배열을 사용하면 중간에 삽입하면 메모리의 위치 위의 모든 것을 복사하는 것이 포함됩니다. 링크 된 목록을 사용하면 두 개의 포인터가 설정됩니다. 삽입 할 내용에 관계없이 위치를 찾아야합니다.

작업 후 삽입 한 후 노드를 참조 할 수있는 경우 링크 된 목록의 경우 O (1)입니다.
배열의 경우 모든 consequtive 노드를 움직여야하기 때문에 여전히 O (n)입니다.

가장 일반적인 경우에는 아마를 삽입 시작에서 끝나거나,목록(과 끝의 목록을 걸릴 수 있습니다 시간이 없을 찾).

이와는 대조적으로 삽입하는 항목에서 시작 또는 끝 array(가 필요한 배열의 크기를 조정하는 경우 그것의 끝에서,또는 크기 조정과 이동하는 모든 요소는 경우 그것은에서 시작).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top