SMALL

 B-tree와 각 노드에 데이터가 저장이 되지만 B+tree의 경우엔 인덱스노드와 리프노드가 분리되어서 존재한다. 그리고, 리프노드는 서로 연결되어 있어서 임의접근과 순차접근모드 성능이 우수하다.

공통점

  • 모든 leaf의 depth가 같다
  • 각 node에는 k/2 ~ k 개의 item이 들어있어야 한다.
  • search가 비슷하다.
  • add시 overflow가 발생하면 split 한다
  • delete 시 underflow가 발생하면 redistribution하거나 merge 한다.

차이점

  • B-tree의 각 노드에서는 key 뿐만 아니라 data도 들어갈 수 있다. 여기서 data는 disk block으로의 포인터가 될 수 있다.
  • B+tree는 각 node에서는 key만 들어가야 한다. 그러므로 B+tree에서는 data는 오직 leaf에만 존재한다.
  • B+tree는 B-tree와는 달리 add, delete가 leaf에서만 이루어진다.
  • B+ tree는 leaf node 끼리 linked list로 연결되어 있다.

B+tree의 장점

  • 블럭사이즈(노드사이즈) 를 더 많이 이용할수잇다 ( 키값에 대한 harddisk 엑세스 주소가 없기 때문에 )
  • leaf node 끼리 linked list로 연결되어있어서 시퀀셜한 레인지 탐색에 매우 유리하다 

B + Tree 의 단점

  • B Tree의 경우 best case에는 루트에서 끝날수 있지만, B+ Tree의 경우 무조껀 leaf노드까지 가야한다.



출처: https://wangin9.tistory.com/entry/B-tree-B-tree [잉구블로그]

LIST

'전공 > 자료구조' 카테고리의 다른 글

Stable Sort, Unstable Sort  (0) 2021.07.13
삽입정렬  (0) 2021.06.07
AVL 트리 vs Red Black 트리  (0) 2021.06.05
정렬 시간복잡도  (0) 2021.06.05
선택정렬(SelectionSort), 거품정렬(BubbleSort)  (0) 2020.09.17
SMALL

 

class Stack
{
private:
	int *stack;
	int top;
	int capacity;
public:
	Stack(int Capacity = 1000);
	int IsEmpty()const;
	int &Top()const;
	void Push(const int &item);
	void Pop();
};
Stack::Stack(int stackCapacity) : capacity(stackCapacity)
{
	stack = new Int[capacity];
	top = -1;
}
int Stack::IsEmpty() const
{
	if (top == -1) return 1;
	else return 0;
}
int & Stack::Top() const
{
	return stack[top];
}
void Stack::Push(const int & item)
{
	stack[++top] = x;
}
void Stack::Pop()
{
	top--;
}
LIST

'전공 > 알고리즘' 카테고리의 다른 글

C/C++ 하노이탑  (0) 2021.06.05
SMALL
  • AVL트리는 더욱 엄격한 균형을 이루고 있기 때문에 Red-Black 트리보다 더 빠른 조회를 제공
  • Red-Black 트리는 상대적으로 느슨한 균형으로 인해 회전이 거의 이루어지지 않기 때문에 AVL트리보다 빠르게 삽입 및 제거 작업을 수행
  • AVL트리는 각 노드에 대해 BF를 저장하므로 노드 당 int 저장이 필요
    Red-Black 트리는 노드당 1비트의 정보만 필요합니다. (플래그 반전만 시키면 됨)
  • Red-Black 트리는 맵, C++의 멀티캐스트, Java treeMap 등 대부분의 언어 라이브러리에서 사용, AVL트리는 더 빠른 검색이 필요한 데이터베이스에서 사용

출처 : https://velog.io/@agugu95/%EC%9D%B4%EC%A7%84-%ED%8A%B8%EB%A6%AC%EC%9D%98-%EA%B7%A0%ED%98%95-RED-BALCKAVL

LIST

'전공 > 자료구조' 카테고리의 다른 글

삽입정렬  (0) 2021.06.07
B-tree, B+tree  (0) 2021.06.05
정렬 시간복잡도  (0) 2021.06.05
선택정렬(SelectionSort), 거품정렬(BubbleSort)  (0) 2020.09.17
해싱(Hashing)  (0) 2020.09.14
SMALL

LIST

'전공 > 자료구조' 카테고리의 다른 글

B-tree, B+tree  (0) 2021.06.05
AVL 트리 vs Red Black 트리  (0) 2021.06.05
선택정렬(SelectionSort), 거품정렬(BubbleSort)  (0) 2020.09.17
해싱(Hashing)  (0) 2020.09.14
Kruskal, Prim, Sollin 알고리즘  (0) 2020.09.13
SMALL

단골문제,, 외우는게 나을듯,,

 

#include<stdio.h>
int cnt = 1;
void hanoi(int n, int start, int mid, int end)
{
	if (n == 1)
	{
		printf("%d 번: %d에서 %d로감\n",cnt++,start,end );
	} 
	else
	{
		hanoi(n - 1, start, end, mid);
		printf("%d 번: %d에서 %d로감\n", cnt++, start, end);
		hanoi(n - 1, mid, start, end);
	}


}

int main()
{
	int n = 3;
	hanoi(n, 1, 2, 3);


	return 0;
}
LIST

'전공 > 알고리즘' 카테고리의 다른 글

스택 구현  (0) 2021.06.05
SMALL

일반화

  • 유사한 클래스들 사이의 공유되는 속성과 동작을 묶어 주며, 다른 한편 그들 사이의 다른 점을 보존할 수 있게 해주는 효과적인 추상화 기법이다.
  • ex) 다중 상속을 생각하면 됨

집단화

  • 클래스들 사이의 부분-전체 또는 부분 관계로 설명되는 연관성을 나타낸다.
  • 집단화는 여러 부속 객체들이 조립되어 하나의 객체가 구성되는 것을 의미
  • 컴퓨터 - 본체, 모니터, 키보드, 마우스 .. 이런씩으로 나누는 것
LIST
SMALL

기능 관점

  • 기능 모델은 시스템이 어떠한 기능을 수행하는가의 관점에서 시스템을 기술
  • 주어진 입력에 대하여 어떤 결과가 나오는가를 보여주는 관점이며 연산과 제약 조건을 묘사
  • 계산이 일어나는 순서는 물론 데이터가 생성되거나 도착하는 순서 등에 대해서는 기술하지 않음
  • 버블도표, 자료흐름도

기능 관점

동적 관점

  • 시간의 변화에 따른 시스템의 동작과 제어에 초점을 맞추어 시스템의 상태와 상태를 변하게 하는 원인들을 묘사하는 것
  • 상태 변화도, 사건추적도

동적 관점

정보 관점

  • 객체 관점이라고도 부르며, 시스템에 필요한 정보를 보여줌으로써 시스템의 정적인 정보 구조를 포착하는 데 사용된다.
  • ER 모델
LIST

'전공 > 소프트웨어공학' 카테고리의 다른 글

모듈, 모듈화  (0) 2021.07.13
일반화와 집단화  (0) 2021.05.16
컴포넌트 기반 개발방법론  (0) 2021.05.16
익스트림 프로그래밍(XP : eXtreme Programming)  (0) 2021.05.16
유지보수 유형  (0) 2021.05.16
SMALL

정의

느슨한 결합도와 큰 입자의 특징을 갖는 컴포넌트를 기반으로 소프트웨어 시스템을 개발함으로써 고객의 요구 변화에 신속하고 유연하게 대처하고자 하는 것을 목표로 하는 방법론

특징

  • 각 프로세스마다 특정 산출물을 가지며, 이 산출물을 통해 중복 투자감소 및 유지보수성 향상을 달성
  • 특정 프레임워크상에서 실행되는 부품화된 컴포넌트를 바탕으로 이를 조립하여 더 큰 컴포넌트를 만들거나 애플리케이션을 개발하는 새로운 기법
  • 개발 생산성, 소프트웨어 재사용성, 시스템 유지보수성을 향상시킬 수 있는 대안으로 주목 받음
  • 컴포넌트를 선택하여 조립함으로써 원하는 소프트웨어를 신속하게 개발
  • 컴포넌트는 세부적으로 구현된 내부의 구현 사항들을 외부로부터 감추고 외부적인 인터페이스만 제공
  • 컴포넌트는 동적으로 바인드할 수 있는 실행시간에 인터페이스를 통해 접근이 가능

장점

  • 복잡한 소프트웨어를 컴포넌트 단위로 분할해서 복잡한 소프트웨어 시스템을 보다 쉽게 관리
  • 높은 품질의 소프트웨어를 가질 수 있음
  • 컴포넌트는 구현 언어에 구애받지 않고 상호 간 호환성 있는 인터페이스를 통한 연동이 가능
LIST

'전공 > 소프트웨어공학' 카테고리의 다른 글

일반화와 집단화  (0) 2021.05.16
소프트웨어 시스템의 3가지 관점  (0) 2021.05.16
익스트림 프로그래밍(XP : eXtreme Programming)  (0) 2021.05.16
유지보수 유형  (0) 2021.05.16
HIPO  (0) 2021.05.16
SMALL

정의 및 특징

  • 애자일 소프트웨어 개발방법론 중 가장 많이 알려진 방법
  • 목표는 '고객에게 최고의 가치를 가장 빨리'
  • 방대한 문서화를 피하고 요구사항에 관해 서로 소통하기 위해 사용자 스토리를 만들어 고객과 직접 대면하여 회의
  • 사용자 스토리는 유스케이스의 차이점은 다루는 범위가 다르다. (사용자 스토리는 작업을 작게 나누어 짧은 단위 시간내에 완료될 수 있는 작업의 범위를 다룸)
  • 점진적 개발, 작고 빈번한 릴리즈, 단순한 설계, 리팩토링, 고객의 전적인 참여
  • 의사소통, 단순함, 피드백, 용기, 존중의 5가지 가치에 근거한 경량급 방법론
  • XP는 팀 중심의 소프트웨어 개발방법이며, 다른 사람과 함께 개발하는 짝 프로그래밍을 권장

※짝 프로그래밍

- 공동책임

- 비정형적인 검사 또는 코드 검토

- 리팩토링 지원

- 비용 절감 및 시간 절약

LIST

'전공 > 소프트웨어공학' 카테고리의 다른 글

소프트웨어 시스템의 3가지 관점  (0) 2021.05.16
컴포넌트 기반 개발방법론  (0) 2021.05.16
유지보수 유형  (0) 2021.05.16
HIPO  (0) 2021.05.16
객체지향언어의 장단점  (0) 2020.09.16
SMALL

유지보수 4가지유형

  1. 수정 유지보수(corrective maintenance) : 잘못된 것을 수정하는 유지보수
  2. 적응 유지보수(adaptive maintenance) : 시스템을 새로운 환경에 적응시키는 유지보수
  3. 완전 유지보수(perfective maintenance) : 새로운 기능을 추가하거나 개선하는 유지보수
  4. 예방 유지보수(preventive maintenance) : 미래의 시스템 관리를 하는 유지보수
LIST

'전공 > 소프트웨어공학' 카테고리의 다른 글

컴포넌트 기반 개발방법론  (0) 2021.05.16
익스트림 프로그래밍(XP : eXtreme Programming)  (0) 2021.05.16
HIPO  (0) 2021.05.16
객체지향언어의 장단점  (0) 2020.09.16
응집도와 결합도  (0) 2020.07.15

+ Recent posts