시간 복잡 도 -- list. insert 에 빠 졌 다

1307 단어
오늘 아주 간단 한 구덩이 에 갇 혔 습 니 다. 그리고 오랫동안 생각 했 습 니 다. insert 함수, 정말 내부 에서 실 행 된 조작 을 알 고 있 습 니까?
처음에는 알고리즘 을 읽 는 책 이 었 는데, 책 에 서 는 작업 내용 이 많 지 않 은 위조 코드 두 단락 을 주 었 다.
첫 번 째 단락 은 다음 과 같다.
data = []
while     :
    x =     
    data .insert(0,x) #            

두 번 째 단락 은 다음 과 같다.
data = []
while     :
    x =     
    data.insert(len(data),x)  #        

처음에 두 번 째 코드 에서 계 산 량 이 첫 번 째 단락 보다 길 이 를 계산 하 는 부분 이 더 많아 야 하지 않 겠 습 니까?가장 두 가지 시간 이 더 걸 릴 것 입 니 다. 사실은 len (data) 이 소모 하 는 시간 이나 시간 복잡 도 는 상수 급 이 므 로 거의 무시 할 수 있 습 니 다.
이 곳 의 문제점 은 len (data) 이 아니 라 insert 의 집행 에 있 습 니 다. insert 는 사용 에 있어 서 역할 적 으로 생각 하면 매우 간단 하고 삽입 입 니 다. 그러나 이 방법 은 중간 에 실 행 된 것 이지 상수 적 인 시간 복잡 도가 아 닙 니 다.
선형 관계 입 니 다. 삽 입 된 위치 와 data 의 크기 에 따라 확정 되 지만 위 에 열거 한 첫 번 째 코드 는 삽 입 된 위치 가 바로 머리 입 니 다. 즉, 맨 앞 에 있 습 니 다. 삽입 작업 을 하면 insert 방법 을 사용 하지 않 고 삽입 하 는 방법 을 간단하게 생각해 보 세 요.
삽입 위치 에서 마지막 요소 까지 한 자 리 를 뒤로 옮 기 는 것 입 니 다. 이 럴 때 시간 이 많이 걸 리 는 지 알 수 있 습 니 다. insert (0, x) 시간 복잡 도 는 O (n) 이 고 insert (- 1, x) 시간 복잡 도 는 O (l) 입 니 다.
두 번 째 코드 시간 복잡 도 계산 은 O (n) 이 고 첫 번 째 코드 시간 복잡 도 계산 은 O (n ^ 2) 입 니 다.
 
요약 하면 이 구 덩이 는 insert 작업 도 사실은 옮 겨 다 니 는 작업 이라는 것 을 잊 었 기 때 문 입 니 다. 시간 이 상수 급 이 아니 라 선형 급 입 니 다.

좋은 웹페이지 즐겨찾기