inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

오픈소스 자료구조 및 알고리즘 in C

Binary Serach Tree의 insert 함수 2

Insert_data에서 prev_tmp를 지웠을 때, 성능향을 기대할 수 있을까요?

232

Kumma

작성한 질문수 6

0

제 생각으로는 성능 향상이 거의 없다고 생각이 되는데, 궁금합니다!

1 . 트리의 특성 상, Insert 내의 While() 1번은 사실 상 2^n개의 데이터를 순회하는 효과니까 데이터가 정말 많아도 100번 이하로 돌 것 같습니다.

2. 대입문 1개는 지우는건 어셈블리 1줄을 지우는 거니까, 100줄 정도의 어셈이 사라지는 것인데, 이게 큰 성능향상인지 궁금합니다!

c linux 알고리즘 gcc data-structure

답변 1

1

김정인

안녕하세요.

tree 의 insert_data 함수의 개선 과정을 문의 하신 것 같습니다.

 

해당 소스를 보면

	if( root == 0 )
	{
		root = temp;
		return;
	}
	while(p)
	{
		prev = p;
		if( p->data > data )
			p=p->left;
		else if( p->data < data )
			p=p->right;
		else
			return;
	}
	if( prev->data > data )
		prev->left = temp;
	else
		prev->right = temp;

위 부분이 아래와 같이 바뀐 것이므로

	while(*p)
	{
		if( (*p)->data > data )
			p=&(*p)->left;
		else if( (*p)->data < data )
			p=&(*p)->right;
		else
			return;
	}
	*p = temp;

while 루프 안의

prev = p 가 사라진 것과

 

while 아래 쪽의 if ~ else 구문이 사라진 것이 주요 합니다.

 

while 루프 안의 코드 삭제는 log N 번 이라 하더라도 데이터가 많은 경우 성능 향상을 기대할 수 있습니다.

 

또한 While 아래쪽의 if ~ else 또한 while 안쪽은 아니지만 insert_data 함수가 여러 번 호출 되었을 때 성능상 이점이 되리라 생각 됩니다.

영상 다운로드는 안되나요?

0

11

0

추가질문)

0

13

1

tgz 백업파일

0

15

2

선택정렬 이해하기 & 구현하기

0

9

1

APM 보안 셋팅

1

17

1

"도커 이미지 생성" 18:59부분에 텍스트 파일로 정리 된거는 어디서 볼수 있나요?

0

19

1

링크드 리스트 중간 삽입삭제 시간복잡도 질문

0

36

2

섹션7에서 개념적 궁금증

0

22

1

26년2회 실기기출은 언제쯤...

0

59

2

재귀함수 종료조건

0

32

2

이론 공부법 요약본 버전 업데이트 문의

0

39

2

ls -al /var/log/nginx

0

44

2

이번강의

0

38

2

버추얼박스 오류

0

43

1

세월이 흘러 문제가 바뀐 것 같습니다.

0

31

2

백준 서비스 종료로 인한 강의 자료 업데이트 요청드립니다.

0

38

1

수업자료는 없나요?

0

19

1

백준 사이트 준비중이라 문제를 볼 수 가 없어요

0

56

2

실습환경

0

30

2

키페어 설정

0

40

2

vi 명령어

0

75

1

tail노드의 이유 & 메모리 풀링 관련

0

366

2

커널 버전

0

285

1

메모리 풀링 속도 확인

0

360

1