구)홈페이지 오탈자 보기
뇌를 자극하는 알고리즘

 

페이지오탈자 내용등록일
131

(1장 링크드 리스트 예제 오탈자)

장 링크드 리스트 예제 오탈자  

p31, p39, P42에서

SLL_DestoryNode -> SLL_DestroyNode  
 

2010-02-091
140

(1장 40 페이지 48번 줄 코드 오류)

40 페이지 48번 줄

void SLL_InsertNewHead(Node** Head, Node* NewHead)
{
  if( Head == NULL)  // --> (*Head) == NULL 이 되어야 함.
    (*Head) = NewHead;
  else
  {
    NewHead->NextNode = (*Head);
    (*Head) = NewNode;
  }

2010-02-091
143

(43페이지 2번째줄 실행 결과 부터)

실행결과가 아래와 같이 정정되어야 합니다.
아래 [실행결과]가 맞는 값입니다.

List[0]: -2
List[1]: -1
List[2]: 0
List[3]: 1
List[4]: 2
List[5]: 3
List[6]: 4

Inserting 3000 After [2]...

List[0] : -2
List[1] : -1
List[2] : 0
List[3] : 3000
List[4] : 1
List[5] : 2
List[6] : 3
List[7] : 4

2009-10-041
144

(44p 비타민 퀴즈 오류)

1. 다음 문장 삭제 요. 본문 예제에 사용된 SLL_InsertNewHead() 함수가 이미 있기 때문임.

"아쉽게도, 헤드 앞에 새로운 헤드를 삽입하고 싶어도 이 함수로는 할 수가 없습니다." 


2. SLL_DestroyAllNodes() 함수 원형 오류. 다음과 같이 변경되어야 함.

SLL_InsertBefore(Node** Head, Node* Current, Node* NewNode)

2010-02-091
149

(49page)

void DLL_InsertAfter(Node* Current, Node* NewNode)
{
NewNode->NextNode = Current->NextNode;
NewNode->PrevNode = Current;

if(Current -> NextNode != NULL)
{
Current->NextNode->PrevNode = NewNode;
Current->NextNode = NewNode;
}
// else
// Current->NextNode = NewNode;
}

-> 

void DLL_InsertAfter(Node* Current, Node* NewNode)
{
NewNode->NextNode = Current->NextNode;
NewNode->PrevNode = Current;

if(Current -> NextNode != NULL)
{
Current->NextNode->PrevNode = NewNode;
}
Current->NextNode = NewNode;
}

2010-03-041
280

(80P)

80쪽 아래 그림에서

우측에 상자 네 개가 있습니다.

"klm"
"def"
"ghi"
"abc"

이 순서를 아래처럼 변경합니다.


"abc"
"def"
"ghi"
"klm"

2010-01-141
295

(p 95 3번 동그라미.)

기 처리되어 있는 오탈자임. 

-> 검사 작업이 끝난 후에는 토큰을 스택에 삽입한다.

2011-02-012
295

(95)

다익스트라 후위 표기식 변환 알고리즘의 절차 설명 중
(3)번 과정이 다음과 같이 보완되어야 합니다.

-------------------------------------------------------

(3) 토큰이 연산자(괄호 포함)일 때, 이 토큰이 스택의 최상위 노드에 저장되어 있는 연산자보다 우선순위가 높으면(왼쪽 괄호는 우선순위가 가장 낮지만 예외적으로 항상 스택에 삽입해야 합니다.) 스택에 삽입하고, 그렇지 않다면 결과에 출력한다. 

2010-09-052
297

(5쇄 p96~p97 3군데)

Node* Popped = LLS_Pop (&Stack); 

수정
Node* Popped = LLS_Pop (Stack); 




2013-03-245
2102

(102)

192행의 gcvt와 198행의 atof 의 설명이 바뀌어야 합니다.


<맞는 표기>

192행 주석 : 소수로 되어 있는 계산 결과를 문자열로 반환
198행 주석 : 문자열로 되어 있는 계산 결과를 소수로 반환

2010-09-052
2103

(103페이지)


2장/Calculator/Test_Calculator.h

->

2장/Calculator/Test_Calculator.c

2011-04-102
3115

(115p)

/* 115p및 Circular Queue 예제 프로그램의 CQ_Enqueue() 함수는 다음과 같이 변경되어야 합니다. */

void CQ_Enqueue( CircularQueue* Queue, ElementType Data)
{
    int Position=0;

    if(Queue->Rear==Queue->Capacity)
    {
        Position=Queue->Rear;
        Queue->Rear=0;
    }
    else
        Position=Queue->Rear++;

    Queue->Nodes[Position].Data=Data;
}

2010-07-152
3115

(4쇄발행, p115)

다음과 같이 수정

22    void CQ_Enqueue( CircularQueue* Queue, ElementType Data)
23    {
24        int Position=0;
25      
26        if(Queue->Rear==Queue->Capacity)
27        {
28            Position=Queue->Rear;
29            Queue->Rear=0;
30        }
31        else
32            Position=Queue->Rear++;
33      
34        Queue->Nodes[Position].Data=Data;
36    }

2012-09-135
3115

(5쇄 115p~116p)

다음과 같이 수정

22    void CQ_Enqueue( CircularQueue* Queue, ElementType Data)
23    {
24        int Position=0;
25      
26        if(Queue->Rear==Queue->Capacity)
27        {
28            Position=Queue->Rear;
29            Queue->Rear=0;
30        }
31        else
32            Position=Queue->Rear++;
33      
34        Queue->Nodes[Position].Data=Data;
36    }

2013-03-245
3119

(4쇄발생 119p)

다음과 같이 수정

22    void CQ_Enqueue( CircularQueue* Queue, ElementType Data)
23    {
24        int Position=0;
25      
26        if(Queue->Rear==Queue->Capacity)
27        {
28            Position=Queue->Rear;
29            Queue->Rear=0;
30        }
31        else
32            Position=Queue->Rear++;
33      
34        Queue->Nodes[Position].Data=Data;
36    }

2012-09-135
3119

(5쇄 119p)

다음과 같이 수정

22    void CQ_Enqueue( CircularQueue* Queue, ElementType Data)
23    {
24        int Position=0;
25      
26        if(Queue->Rear==Queue->Capacity)
27        {
28            Position=Queue->Rear;
29            Queue->Rear=0;
30        }
31        else
32            Position=Queue->Rear++;
33      
34        Queue->Nodes[Position].Data=Data;
36    }

2013-03-245
3120

(p.120 Test_CirCularQueue.c)

기 반영되어 있음.

2011-11-153
3121

(121p)

Circular Queue 예제 프로그램의 결과는 다음과 같이 수정되어야 합니다.

Dequeue: 1, Front:0, Rear:4
Dequeue: 2, Front:1, Rear:4
Dequeue: 3, Front:2, Rear:4
Capacity: 10, Size: 10

Dequeue: 4, Front:3, Rear:2
Dequeue: 100, Front:4, Rear:2
Dequeue: 101, Front:5, Rear:2
Dequeue: 102, Front:6, Rear:2
Dequeue: 103, Front:7, Rear:2
Dequeue: 104, Front:8, Rear:2
Dequeue: 105, Front:9, Rear:2
Dequeue: 106, Front:10, Rear:2
Dequeue: 107, Front:0, Rear:2
Dequeue: 108, Front:1, Rear:2   

2010-07-092
3125

(P125)

소스코드 024 라인

Node* LQ_CreateNode(char* Data); 

->

Node* LQ_CreateNode(char* NewData); 

2010-07-153
4137

(137)

페이지 중간에 중첩된 괄호 표기 예제 그림에 오타가 있습니다.
C와 D는 형제 노드인데, D가 C의 자식 노드인 것처럼 표기가 되었습니다. 

* 변경전 
 (A(B(C(D(E)(F)))(G(H))(I(J(K))))  

* 변경 후
 (A(B(C)(D(E)(F)))(G(H))(I(J(K))))    
 

2010-09-052
4143

(143P)

143P 트리 출력하기의 소스코드에서, 세 번째 줄을 정정합니다.


   nt i=0;

-> 

   int i=0;


아래처럼 말이죠....


void LCRS_PrintTree(LCRSNode* Node, int Depth)
{
   int i=0; 으로 바껴야 될것 같습니다. 

2010-01-141
4145

(p.145)

오류 아님. 독자의 Left Child, Right Sibling 구조체로 트리를 표현하는 방법에 대한 학습 부족.

2012-07-234
4147

(147 쪽 비타민 퀴즈)

이 예제 프로그램에서 특정 레빌의 모든 로드를 출력하는 함수 LCRS_PrintNodesAtLevel(int Level)를 작성하세요.

-> 

이 예제 프로그램에서 특정 레빌의 모든 로드를 출력하는 함수 LCRS_PrintNodesAtLevel(LCRSNode* Root, int Level)를 작성하세요.

2010-07-163
4157

(p157 > ET_DestroyTree(ETNode* Root) 함수)

ET_DestroyTree(ETNode* Root) 
{
 if(Node==NULL)
  return;

->

ET_DestroyTree(ETNode* Root) 
{
 if(Root==NULL)
  return;

2010-07-193
4166

(p166, p170)

1) 166쪽 소스코드에서

void ET_BuildExpressionTree(char* PostfixExpression, ETNode**Node)
{
ETNode* NewNode=NULL;

->

void ET_BuildExpressionTree(char* PostfixExpression, ETNode**Node)
{

세 번째 줄인 ETNode* NewNode=NULL; 을 삭제합니다.


2) 170쪽 소스코드에서
065 라인의 ETNode* NewNode=NULL; 을 삭제합니다. 

2010-07-203
5207

(207)

207페이지의 예제 프로그램 소스 코드 중 10번~34번줄의 소스 코드가 다음과 같이 변경되어야 합니다.



int Partition( int DataSet[], int Left, int Right )
{
    int First = Left;
    int Pivot = DataSet[First];

    ++Left;

    while( Left <= Right )
    {
        while( DataSet[Left] <= Pivot && Left < Right )
            ++Left;

        while( DataSet[Right] >= Pivot && Left <= Right )
            --Right;

        if ( Left < Right )
            Swap( &DataSet[Left], &DataSet[Right]);
        else
            break;
    }

    Swap( &DataSet[First], &DataSet[Right] );

    return Right;

2010-09-052
5212

(212p 드무므로)


드무므로 -> 드물므로
 

2010-02-091
6223

(p. 223)

Seqeuntial -> Sequential (eu -> ue)

2012-07-245
6240

(p.240, p. 246, SearchTree.c, 32~43 라인,)

기 반영되어 있음.

2011-11-193
6240

((4쇄발행) 240p 코드부분, 246p 코드부분의 037라인)

기 수정 완료.

2012-09-135
6244

(244p)

244p의 예제 코드 중 가운데 부분에서 다음 코드를 다음과 같이 고쳐야 합니다.


------------- 변경 전 ----------------
/*  최소값 노드를 찾아 제거한 뒤 현재의 노드에 위치시킨다. */
BSTNode* MinNode = BST_SearchMinNode( Tree->Right );
MinNode = BST_RemoveNode( Tree, NULL, MinNode->Data );
Tree->Data = MinNode->Data;


------------- 변경 후 ----------------
/*  최소값 노드를 찾아 제거한 뒤 현재의 노드에 위치시킨다. */
BSTNode* MinNode = BST_SearchMinNode( Tree->Right );
Removed = BST_RemoveNode( Tree, NULL, MinNode->Data );
Tree->Data = MinNode->Data;

2010-09-052
6262

(262)

레드 블랙 트리에 대한 설명 및 그림을 다음 링크의 내용과 같이 변경되어야 합니다.
아래 링크를 참고하세요.

http://www.hanb.co.kr/brain/board/view.html?id=algorithm&ma_id=14505&pg 

2010-09-051
6263

(4판(4쇄 발행), 263페이지 위에서 2번째 줄)

해당 문구 삭제 필요.

2012-09-135
8321

(321p,322p)

기수정되어 있음.

2011-11-043
8328

(328쪽 소스코드 아래 부분)

    if ( TheList->Next == NULL )
            break;
        else
            TheList = TheList->Next;
    }


->
  
        if ( TheList->Next == NULL )
            return NULL;
        else
            TheList = TheList->Next;
    }

2015-02-247
8331

(331)

331쪽의 Chaining.c 코드, "006" 라인

HT->Table = (List*)malloc(sizeof(Node) * TableSize);


다음과 같이 변경합니다.

HT->Table = (List*)malloc(sizeof(List) * TableSize); 

2010-09-052
8333

(333쪽 소스코드 079 라인)

079     break;

->

079      return NULL;

2015-02-247
8344

(344쪽 11라인)

11     enum ElementStatus ;  

->

11     enum ElementStatus

2015-02-247
8345

(4쇄 발행, 345p 041 Line, 044 Line)

다음과 같이 수정  

041    (*HT)->Table[Address].Key = (char*)malloc( sizeof(char) * (KeyLen + 1) );
042    strcpy( (*HT)->Table[Address].Key, Key );
043
044    (*HT)->Table[Address].Value = (char*)malloc( sizeof(char) * 
   (strlen(Value) + 1) );

2012-09-205
9360

(p360)

360p 최상단의 의 방향성 그래프 인접 행렬 그림 수정

2013-11-265
9382

(4쇄 발생 382p 첫번째 그림)

정점 B와 모든 진출 간선 제거

2012-09-245
9390

(67라인 ~ 71라인)

67    /*  그래프 소멸 */
68    DestroyGraph( graph );
69
70    return 0;
71 }

->

67    /*  그래프 소멸 */
68    DestroyGraph( graph );
69
70   /* 44페이지 비타민 퀴즈를 푼 경우 아래의 코드 사용 가능 */
71   /* SLL_DestroyAllNodes(&SortedList); */
72
73    return 0;
74 }

2015-02-247
9395

(4쇄 발행, 395p 첫번째 그림)

395 페이지 첫 번째 그림에서 C-F 간선을 굵은 회색에서 가는 검은색 실선으로 변경

2012-09-246
9400

(P400 중간 부분 AddEdge() 함수 호출 부분)

P400 중간 부분 AddEdge() 함수 호출 부분  
오탈자 내용 AddEdge(MSTVertices[ToIndex], CreateEdge(MSTVertices[ToIndex], STVertices[FromIndex], Weights[i]));

-> 

AddEdge(MSTVertices[ToIndex], CreateEdge(MSTVertices[ToIndex], MSTVertices[FromIndex], Weights[i])); 로 변경되어야 함.  

2010-02-091
9410

(p410, 9장/MinimumSpanningTree/Test_MST.h)


p410, 9장/MinimumSpanningTree/Test_MST.h  

 -> 9장/MinimumSpanningTree/Test_MST.c 로 변경되어야 함.
 

2010-02-091
10437

(4쇄 437p 코드 16라인, 첨부 예제코드 모두)

HashText = ReHash(Text, i, PatternSize , HashText, Coefficient);

2012-09-285
10439

(4쇄 발행 439p 실행결과 1번째줄)

righteousness

2012-09-285
10440

(4쇄 발행 440p 밑부분표의 1행)

BAABABAAA -> BAABABAA 

2012-09-285
10444

(3쇄 - 444p 테이블)

기 수정되어 있음.

2011-05-103
10444

(p444 중간 부분)

이동 거리 = 일치 접두부의 길이 + 최대 경계 너비

->

이동 거리 = 일치 접두부의 길이 - 최대 경계 너비

2014-06-117
10455

(455쪽 두 번째 테이블 아래)

455쪽 두 번째 테이블 아래 문단부터 ~ 456쪽 <보이어-무어 알고리즘의 구현> 전까지. 아래 텍스트로 변경합니다. 

-----------------------------------------------------------------------------------------------------
이제 두 번째 경우를 다룰 차례가 됐습니다. 두 번째 경우는 가장 넓은 경계의 시작 위치가 곧 이동 거리가 됩니다. 첫 번째 경우에 대한 이동 거리는 이미 처리를 했으므로 이제 우리는 테이블 내에서 이동 거리가 0인 항목에 대해서만 처리를 하면 됩니다. 

가장 넓은 경계의 시작 위치를 이동 거리로 입력할 때의 규칙은 다음과 같습니다.
(1) 첫 “접미부의 가장 넓은 경계의 시작 위치”를 이동 거리로 입력한다(위 예제에서는 5).
(2) 경계의 너비보다 접미부가 짧아지기 전까지 나타나는 모든 경계는 동일한 이동 거리를 입력한다.
(3) 경계의 너비보다 접미부가 짧아지면 “접미부의 시작 위치 - 1”에 있는 “접미부의 가장 넓은 경계의 시작 위치”를 이동 거리로 입력한다.

자, 패턴을 왼쪽부터 읽으면서 각 경계의 이동 거리를 입력해보겠습니다. 먼저 첫 접미부의 가장 넓은 경계의 시작 위치가 5이므로 A(테이블[0])의 이동 거리를 5로 입력합니다. 이 이동 거리는 경계의 길이가 5가 되기 전까지 계속 사용합니다. AA(테이블[1]), AAB(테이블[2]), AABAB(테이블[4]) 모두 5를 입력합니다.

접미부의 시작 위치 0 1 2 3 4 5 6
문자열                 A A B A B A
접미부의 가장 넓은 
경계의 시작 위치 5 3 4 5 6 6 7
이동 거리                 5 5 5 2 5 4 1

테이블[6] 이후에는 이동 거리가 6으로 변경됩니다. 접미부의 가장 넓은 경계의 시작 위치[5]가 6이기 때문입니다. 하지만 이 예제 테이블에는 이동 거리가 0으로 남아있는 곳이 없으므로 이것으로 처리가 완료되었습니다.
-----------------------------------------------------------------------------------------------------

보이어-무어 알고리즘의 구현

2015-02-247
12505

(제3쇄 12장 pp. 505)

기 수정되어 있는 내용임.

2011-05-163
13526

(4쇄발행 526p 그림)

그림에 굵은선으로 사각형 표시 된 부분이 있는데
3,4,5의 왼쪽위(↖)로 가도록 되어있는 칸에 굵은 사각형 표시

2012-10-105
14538

(p. 538)

버그 아님. 독자의 예제 실행 오류로 판단됨.

2012-08-135
14547

(P 547 그래프 그림 오탈자)

547 페이지 아래쪽 그림 G 노드의 비용이 364에서 346으로 바뀌어야 함. 

2010-02-091
15580

(6쇄 15장 백트레킹 MazeSolver.c (580~582 p))


20 Start.X = i; → Start.X = j;
21 Start.Y = j; → Start.Y = i;
40 Maze->Data[Start.X][Start.Y] = START; → Maze->Data[Start.Y][Start.X] = START;
53 if ( Maze->Data[Current->X][Current->Y] == GOAL ) → if ( Maze->Data[Current.Y][Current.X] == GOAL)
56 Maze->Data[Current->X][Current->Y] = MARKED; → Maze->Data[Current->Y][Current->X] = MARKED;
67 Maze->Data[Current->X][Current->Y] = WAY; → Maze->Data[Current->Y][Current->X] = WAY;
106 if ( Maze->Data[Next->X][Next->Y] == WALL ) return FAIL; → if ( Maze->Data[Next->Y][Next->X] == WALL) return FAIL;
107 if ( Maze->Data[Next->X][Next->Y] == MARKED ) return FAIL; → if ( Maze->Data[Next->Y][Next->X] == MARKED ) return FAIL;

2013-12-026