project #2    말의 여행                   자료구조                     조장:                     조원:             20113318 정예린
순서                            •조원별 업무분담                                  •일정 계획                                       -회의록...
1)조원별 업무 분담2)일정계획03.27~03.290329~04.0304.03~04.0504.05~04.103)문제파악말의 여행스텍큐백트레킹헤밀턴의 순환헤밀턴의 경로기사의 여행등의 자료 첨부4)알고리즘 계획
초안말의 여행 알고리즘1. 처음 초기위치는 모두 0으로 초기화 시켜준다.2. 처음 위치에서 이동하면서 갈림길을 발견하면         0은 갈 수 있는 길...ㄱ.                               ...
로 흔히 사용한다.고속도로 톨게이트에 줄 서 있는 차들의 행렬이 큐의 대표적인 예인데 먼저 도착한 차가 먼저빠져 나가고 늦게 도착한 차는 앞 차가 지나갈 때까지 기다려야 한다.큐는 배열로 구현한 일자 큐( 선형 큐 라고...
     ↓         f     r[ ][ ][ ][ 4 ][ ]  (2, 3을 삭제했다 (빼내서 사용했다) (2, 3 get))     ↓         f       r[ ][ ][ ][ 4 ][ 5 ]  (5...
큐가 꽉 찬 상태는 그림과 같다.Exif information loading...그림처럼 (rear+1)%갯수 == front 일 때 큐가 꽉 찬 상태이며, front == rear 일 때 비어있는 큐가 된다. (맨 처...
이 부분은 차교수님이 힌트 주신부분 넣기!6)소스 구현초안 및 구현 과정코딩 해보면서 중간 중간 자료 첨부7)문제점 파악/해결법 토의최종소스 전에 문제점 파악하기 및 해결법8)최종소스9)시간복잡도/공간복잡도
Upcoming SlideShare
Loading in …5
×

2012 Ds 02

225
-1

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
225
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2012 Ds 02

  1. 1. project #2 말의 여행 자료구조 조장: 조원: 20113318 정예린
  2. 2. 순서 •조원별 업무분담 •일정 계획 -회의록 •문제 파악-infix expression을 postfix expression으로 바꾸는 방법 -스택(stack)과 큐(queue)의 개념 •알고리즘 계획 •알고리즘 토의, 보완 •소스구현 •문제점 파악 / 해결법 토의 •최종소스 •시간 복잡도/공간 복잡도
  3. 3. 1)조원별 업무 분담2)일정계획03.27~03.290329~04.0304.03~04.0504.05~04.103)문제파악말의 여행스텍큐백트레킹헤밀턴의 순환헤밀턴의 경로기사의 여행등의 자료 첨부4)알고리즘 계획
  4. 4. 초안말의 여행 알고리즘1. 처음 초기위치는 모두 0으로 초기화 시켜준다.2. 처음 위치에서 이동하면서 갈림길을 발견하면 0은 갈 수 있는 길...ㄱ. 1은 갈 수 없는 길...ㄴ.ㄱ.갈 수 있는 길은 계속 진행한다.ㄴ.갈 수 없는 길이므로 원래 자리로 돌아온다. → 백트래킹※백트래킹답이 될 수 있는 경우를 모두 가본 후에 답을 찾는 방법.모든 경우의 수를 전부 따져보는 것.검색 공간의 모든 가능한 배치 방법에 대해 어떤 작업을 반복하기 위한 조직적인 방법입다.모든 가능성을 테스트하기 때문에 반드시 제대로 된 답이 나오게 되어있다.3. 규칙을 기본으로 자리이동시의 좌표 값을 저장한다.→스택※스택LIFO : Last In First Out같은 타입의 집합을 관리.push : 자료를 집어넣는 행위.pop : 자료를 빼 내는 행위.push의 동작-push로 데이터를 넣으며, push 함수에선 top을 1 증가시킴.-top을 인자로 가지는 배열에 입력 data를 넣음.-top과 할당된 스택의 크기를 비교하여 top이 스택의 마지막 요소보다 작을 때만 push.-이 조건에 맞지 않으면 에러를 리턴.(오버플로우)pop의 동작-Top 위치의 값을 읽고 Top은 하나 감소.-스택이 텅 비어서 더 꺼낼 데이터가 없을 때 -1이라는 에러 리턴.(언더플로우)4. 출력 시는 스택으로 저장한 입력 값은 큐로 출력.큐(Queue) 는 동적배열과 마찬가지로 상당히 구현이 쉬운 자료구조중 하나이다. 큐는 간단히어떠 한 기억장소에 쓰고자 하는 데이타들을 차례로 기억 시킨 뒤, 그 데이타들을 입력 한 순서대로 차례로 다시 읽어오는 기법이다.즉, 큐는 FIFO(First In First Out)의 원리대로 동작하는 자료 구조인데, FIFO가 무슨뜻인가하면, 먼저들어간 자료가 먼저나오고, 늦게들어간 자료가 늦게 나온다는 것이다.필자는 맨처음 큐를 쇠파이프 라고 배웠다. 왜냐하면 쇠 파이프에 무언가를 넣고 쌓아두면 반대쪽 구멍으로 그 무언가 들이 내가 넣은 순서대로 나올 수 밖에 없기 때문이다. 이렇게 해두면 이해가 쉬울 것이다.넣은 순서대로 자료를 꺼내가므로 순서대로 처리해야 하는 자료를 임시적으로 저장하는 용도
  5. 5. 로 흔히 사용한다.고속도로 톨게이트에 줄 서 있는 차들의 행렬이 큐의 대표적인 예인데 먼저 도착한 차가 먼저빠져 나가고 늦게 도착한 차는 앞 차가 지나갈 때까지 기다려야 한다.큐는 배열로 구현한 일자 큐( 선형 큐 라고 한다)와, 원형 큐 , 그리고 연결리스트로 구현 한큐. 이렇게 크게 3가지로 나눌 수 있다. (연결리스트로 구현 한 큐는 이 장에선 다루지 않고,연결리스트의 강의 후 따로 다룰것이다.)그리고 큐 에서 쓰이는 용어로는 front(앞, 전방) 과, rear(뒤, 후방)이 있으며, 이 둘은 배열의 데이타 들 중 다음으로 삭제될 위치와 다음으로 삽입될 위치를 가리키는 역활을 하며, 당연히 포인터로 구현 할 수 있겠지만, 배열을 이용한 큐 에서는 간단히 정수형변수로도 구현이가능하다.ex) front = 7 -> 배열[7] -> 8번째 방에서 다음으로 삭제된다.보통 front는 자료들 중 맨 앞을, rear는 맨 뒤 자료의 다음칸을 가리킨다.또다른 용어로 삽입을 put, 출력(빼내기)을 get 이라 한며, init 를 초기화(시작 전 셋팅정도)로 정의한다. (init는 큐 뿐만 아니라 스택외 다른 자료구조에서도 시작전 셋팅정도의 초기화의 의미로 쓰인다.)------참고로 사람마다 front 와 rear를 head(머리)와 tail(꼬리)로, put과 get을 insert(삽입)과 delete(삭제)로 부르기도 한다.-----------용어들은 아래를 참고하면 충분히 이해를 할 수 있을 것이다.당연히 선형 큐가 구현하기 가장 쉬운 듯 보이므로, 선형 큐 부터 보도록 하자.1. 선형 큐선형 큐는 구현이 가장 쉽다. 동작 원리로는 아래의 그림과 같다.------------------------------------------------------------------------------------------------------f,r[ ][ ][ ][ ][ ] (배열을 초기화 했다. - 비어있다 (front와 rear가 선두인 0을 가리킨다.)     ↓ f      r[ 1 ][ 2 ][ ][ ][ ] (1과 2를 삽입했다 (1과 2를 put 했다))     ↓     f   r[ ][ 2 ][ ][ ][ ] (1을 삭제했다(빼내서 사용했다) (1을 get했다))     ↓     f        r[ ][ 2 ][ 3 ][ 4 ][ ]  (3, 4를 삽입했다 (3, 4 put))
  6. 6.      ↓         f     r[ ][ ][ ][ 4 ][ ]  (2, 3을 삭제했다 (빼내서 사용했다) (2, 3 get))     ↓         f       r[ ][ ][ ][ 4 ][ 5 ]  (5를 삽입했다 (5 put))------------------------------------------------------------------------------------------------------보다시피 삽입을 할 때에는 r이 한칸씩 오른쪽으로, 삭제를 할 때에는 f가 한칸씩 오른쪽으로간다는 걸 알 수 있다. 이렇게 계속 삽입, 삭제를 반복하다보면 금새 배열의 뒤쪽 공간이 부족해 진다는 걸 알 수 있다. 위 그림에선 5가 삽입 된 후 rear 가 배열의 경계를 넘어서며,다음 삽입 동작을 할 수 없게 된다. 배열의 크기만큼 자료가 들어 있지도 않은데 기억 공간이부족해진 것이다.큐의 자료는 빈번하게 삽입, 삭제되므로 배열 크기를 늘리는 것으로는 이 문제를 근본적으로해결할 수 없다.하지만 rear가 경계를 넘어서면 4, 5 를 복사하여 앞으로 보내도록 구현하면[ 4 ][ 5 ][ ][ ][ ] 로 다시 나타 낼 수 있는데, 큐가 찰 때마다 이런 식으로 매번 복사를 한다면 느리고 비효율적이다.그래서 이 방법 대신 포인터가 배열의 끝에 닿았을 때 앞쪽으로 보내어 배열을 원형(Circular)으로 연결하는 방법을 많이 사용하는데 이는 % 연산자로 간단하게 구현할 수 있다.2. 원형 큐원형큐의 front와 rear는 원형의 큐를 빙글 빙글 돌아가면서 자료를 삽입하고 삭제한다. Exif information loading... 그림과 같다.init_queue 는 큐를 초기화 하며(시작시 셋팅의 의미가 있다),clear_queue 도 큐를 초기화 한다(사용 도중 데이타를 초기화 하는 의미가 있다).오버플로우(overflow)는 큐가 꽉 찬 상태에서 더 입력을 하려 했을 경우 나오며, 언더플로우(underflow)는 큐가 비어있는 상태에서 더 출력을 하려 했을 경우에 나온다.
  7. 7. 큐가 꽉 찬 상태는 그림과 같다.Exif information loading...그림처럼 (rear+1)%갯수 == front 일 때 큐가 꽉 찬 상태이며, front == rear 일 때 비어있는 큐가 된다. (맨 처음엔 front == rear == 0 이다)head가 tail과 같은 상태는 큐가 빈 상태와 같으므로 두 포인터의 값만 비교해서는 큐의 정확한 상태를 알 수 없다.그래서 head 바로 앞의 한 칸은 미사용으로 남겨 두어 tail이 head의 바로 앞쪽에 있을 때,즉 tail이 head-1일 때를 큐가 가득찬 것으로 정의한다.이렇게 하면 기억 장소 하나를 쓰지 못하는 약간의 낭비가 발생하기는 하지만 상태를 정확하게 판별할 수 있다.------------------------------------------------------------------------------------------------------하지만, 배열로 큐를 구현하는 것에는 한계가 있으며, 상당히 불편하다. 이유인 즉, 배열의 크기보다 더 많은 데이타가 삽입되면 큐가 가득차게 되어 쓸 수 없다는 점. (오버플로우 라 한다)인데, 이를 고치기 위해 최대크기를 충분히 할당 한다해도, 무한히 커지지는 않기 때문에언제든지 부족한 상황이 나올 수 있다.물론 동적 배열을 쓸 수도 있겠지만 여러 가지 상황으로 볼 때 어울리지 않는다.또한 배열은 연속적인 메모리 공간을 차지하는 직선적인 구조를 가지기 때문에 최대 크기만큼충분한 용량을 확보했더라도 삽입점이 금방 배열 끝에 이르게 된다.그래서 처음과 끝을 인위적으로 연결하여 원형으로 만들어 직선의 기억 공간을 재사용해야 하는 불편함이 있다. 뿐만 아니라 원형 구조이다 보니 가득찬 경우와 빈 경우가 잘 구분되지 않아 한칸을 버리거나 별도의 플래그를 도입하는 기법도 동원되어야 한다.이러한 이유들 때문에 연결리스트로 구현한 큐를 선보이는데, 이는 이러한 불편함을 해결 할수 있다.연결리스트로 구현 한 큐는 차후 연결리스트를 배운 후 또 다시 공부 해 보도록 하자.말의 여행의 기본조건은 헤밀턴의 순환(헤밀턴의 경로), 기사의 여행 규칙을 기본으로 한다.최종 알고리즘이 부분은 차교수님이 힌트 주신부분 넣기!5)알고리즘 토의 및 보완최종 알고리즘
  8. 8. 이 부분은 차교수님이 힌트 주신부분 넣기!6)소스 구현초안 및 구현 과정코딩 해보면서 중간 중간 자료 첨부7)문제점 파악/해결법 토의최종소스 전에 문제점 파악하기 및 해결법8)최종소스9)시간복잡도/공간복잡도

×