분류 전체보기 532

[프로그래밍 언어론] Sub Program Part 4 - 나머지 Phase 2

* Generic Sub-Programs - 특정 조건(Types, ...)에 관계없이 돌아가는 서브프로그램(로직) ⓐ In Ada > 타입, 배열의 길이, 상수 값, 서브프로그램가 파라미터로 들어오는 것에 대해서 Generic Sub-program을 지원 > 선언, 구현, 사례화(생산), 사용의 4단계에 걸쳐서 사용이 가능하다. ex1) sort 프로그램 // 들어오는 타입에 관계없이 돌아가는 Type Generic Sub-program ex2) parameter로 서브프로그램을 받는 Sub-program Generic Sub-program ⓑ In C++ - C++에서는 Generic Sub-program을 Template라는 것으로 정의 하였다. - 암시적으로 사례화가 일어나기 때문에 Ada에 비해..

[NT Novel] 사쿠라장의 애완 그녀 Review

만화책 사던것도 많이 완결이 나고... 마요츠키에 힘입어 먼가 소설책중에서 재밋는 것이 없을까하다가... 그냥... 아무 생각없이.. 1권이길래 산 책입니다. 1권을 읽었을때는... 이거 2권을 사야하나? 장르는 그냥 코미디인가? 라는 생각이 많았습니다. 마요치키 8권을 구매할때 옆에 같이 보이길래 2권도 샀습니다. 아직 읽는 중이지만... (역시 만화책은 금방일지만... 소설책은 먼가 시간내서 쭉 한번에 읽고 싶은 생각이 들어서 반정도까지 밖에 몬 읽었습니다 ㅠㅠ) 2권을 반정도도아니고, 1/5정도만 읽었을때 감이왔습니다. 이건 재미있다! 1권에 읽으면서 들었던 생각과 정반대의 생각이 들었습니다. 장르도 확실해지고, 등장인물이 늘어가는 2권은 무지 재밋었습니다. 이에 대해서 간단히 리뷰를 작성해보도록하..

Hobby/Novel 2011.11.20

[알고리즘] 탐욕적 알고리즘 Part 2 - 최소신장트리 Phase 1

* 용어 설명 - 위의 그래프 G1은 무방향 가중치 연결 그래프를 나타내고 있다. - 순환경로(cycle) : 시작하는 정점과 끝나는 정점이 같은 것 ※ 여기서 경로란? 한 정점에서 다른 정점으로 가는 길을 말한다. - 부분그래프 : 그래프 중에서 일부분을 나타낸 것 - 트리 : 연결 되어 있고 순환 경로가 없는 그래프 - 신장트리 : 그래프의 부분 그래프 중에서 본래 그래프의 모든 정점을 가지고 있으며, 트리가 되는 것 - 최소비용 신장 트리: 신장트리들 중에서 가중치가 가장 적은 트리 * 무작정 알고리즘 - 모든 신장트리를 고려한 후, 그 중에서 비용이 가장 적게되는 것을 선택 - 분석 : 각 간선은 포함 될수도 있고 안될 수도 있다.(각간선마다 2가지 경우가 존재한다.) > 2 * 2 * 2 * ...

[프로그래밍 언어론] Sub Program Part 4 - 나머지 Phase 1

설계 이슈중에서 지금까지 다루지 않았던 것들을 "나머지..."를 통해서 설명하겠다. * Multidimensional Array as Parameter ( 파라미터로서의 다체원 배열 Passing ) - C언어에서 프로그램을 개발한다고 생각하자. A라는 사람이 main을 구현하고 B라는 사람이 sub을 구현한다. 이 경우 main의 개발자 A가 sub에 다차원배열을 보내려고한다고 하자. 그러면 B는 main에서 오는 배열의 크기가 정해지지 않는한 구현할 수가 없게 된다. - 즉, 파라미터로 배열을 Passing하게되면, 프로그램을 나눠서 구현할 때의 문제점이 발생한다. - 또한, Data Type의 배열에서 봤듯이 다차원 배열에서 저장장소의 위치에 접근하기 위해서는 column size를 알아야한다. 즉..

[프로그래밍 언어론] Sub Program Part 3 - Type Check, Parameter Passing 구현법

* Type Checking of Parameters - FORTRAN & Original C : none - FORTRAN90, JAVA, Ada, Pascal, Modula-2 : 항상 실행 - ANSI C, C++ : 사용자의 선택으로 type check를 할지 안할지 여부를 정할 수 있다. ex) * Parameter Passing 구현법 - 대부분 runtime stack을 이용하여 passing 방법을 구현한다. - pass-by-name의 경우에는 stack에 치환에 필요한 코드가 들어간다.(비용 높아짐) > 이러한 코드를 code segment 또는 thunks라고 부른다. * Parameter Passing 선택 - 일반적으로 언어들은 call by value 와 call by refer..

[알고리즘] 탐욕적 알고리즘 Part 1 - Basic

* 탐욕적 알고리즘 - 현재 상태에서 가장 최적인 상태를 선택하는데 사용하는 알고리즘 - 상태가 변할 때 마다 새로운 실행을 하여서 최적의 상태를 찾는다. ex) 문구점에 627원 짜리 물건을 사는데 1,000 원을 냈다. 가게 주인은 500, 100, 50, 10, 5, 1짜리 동전을 이용해서 최고 적은 수의 동전으로 거스려주로고 한다. 최소의 동전의 수는 몇개인가? > 거스름돈 : 373원 > 탐욕적 알고리즘은 가장 좋아 보이는 것부터 선택을 실시한다. ① 500원 짜리 동전을 선택한다. 373 500 원짜리를 내려 놓는다. ② 100원 짜리 동전을 선택한다. 373 > 100 -> 100원짜리 동전을 가진다. / 남은 금액 : 273원 ③ 100원 짜리 동전을 다시 선택한다. 273..

[알고리즘] 동적프로그래밍 Part 3 - 연쇄행렬곱셈

다음의 사실을 이용하여 연쇄행렬곱셈의 최적의 곱셈 순서를 구한다. 1. n*m 행렬과 m*l을 곱하기 위해서 필요한 곱셈들의 수는 n*m*l이다. 2. 행렬의 곱셈은 겹합적이다. (A*B)*C = A*(B*C) 위의 사실을 가지고 3개이상의 행렬 곱셈을 수행하는대 순서에 따라서 곱셈의 수가 큰차이가 있음을 발견했다. ex) A(100*1), B(1*100), C(100*5) 행렬이 있다. ⓐ (A * B) * C 의 곱셈의 수는 A*B를 구하는데 곱셈의 수 "100*1*100"에 A*B에 의해서 생성된 배열(100*100) 행렬에 C를 곱하여 해를 구하는데 필요한 곱셈의 수 "100*100*5"를 더한 수 "60,000"이다. ⓑ A * (B * C) 의 곱셈의 수는 B*C를 구하는데 곱셈의 수 "1*1..

[프로그래밍 언어론] Sub Program Part 2 - Local variable, Passing Models

1. Sub-Program의 Local 변수를 static으로 할 것인가 dynamic으로 할 것인가? - 대부분의 언어는 stack-dynamic방식을 취하고 있다. (>stack-dynamic방식이란 예전에 말했듯이, 상대위치를 저장후 call시 메모리를 할당하는 것이다) - 장점 > recursion이 가능하다. > 기억 공간을 다른 서브프로그램과 공유를 한다. 메모리 절약 ( 특정 서브프로그램이 메모리를 사용 후 반납을 한 공간을 다른 서브프로그램이 사용가능한 것을 의미) - 단점 > 지속적인 할당과 회수로 인한 오버해드가 발생한다 > 직접적이지 않은, (상대적 위치를 고려하여 메모리 계산)주소 참조로 속도가 느리다. > 이전에 서브프로그램에서 수행한 값을 같은 서브프로그램과 공유할 수 없다. -..

[알고리즘] 동적프로그래밍 Part 1 - 이항 계수(Binomial Coefficient) 구현 - by java

public class bincoeff { // 두 개의 값중에서 작은 값을 판별하여서 반환해준다. private int min(int i, int j){ if ( i >= j ) return j; else return i; } // 이항 계수를 구하는 부분 public int coeff(int n, int k){ int i, j;// 루프문을 돌기 위해서 필요한 변수 int B[][] = new int[n+1][k+1];// 배열을 생성해준다. // 구하려는 값을 구하기 위해서는 1을 더해서 확장하여 생성해줘야한다. for ( i = 0 ; i

[프로그래밍 언어론] Sub Program part 1 - Base, Design Issues

* Sub Program : 명령형 언어중에서 가장 구현, 제공이 힘든 부분이다. * 특성 - Single entry Point : 서브프로그램을 호출하면 그 서브프로그램의 시작지점이 항상 일정하다. (Sub-Program 구현부) cf) 이거랑 비교대는 것으로 서브프로그램을 호출할때, 그 상태의 경우에 따라서 시작지점이 달라지는 것도 있다. - caller와 callee : caller는 서브프로그램을 호출하는 것이고, callee는 호출 되는 서브프로그램을 말한다. - caller가 발생하면, 호출한 위치에서 프로그램은 잠시 멈춘후(Suspended) callee를 실행한다. > callee가 종료되면(sub-program의 return발생), 프로그램은 이어서 실행을 한다. > 즉, 명령형언어의 s..