전체 글(49)
-
[알고리즘 문제해결 전략]6장. 무식하게 풀기_①
Preview 1. 재귀 호출과 완전 탐색2. 최적화 문제3. 많이 등장하는 완전 탐색 알고리즘 1. 재귀 호출과 완전 탐색 재귀 함수:?자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고 나머지를 자신을 호출해 실행하는 함수완전 탐색? 컴퓨터의 빠른 계산 능력을 이용하여 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법 **재귀 호출의 기저사례: 더 이상 쪼개지지 않는 가장 작은 작업 EX> 0부터 N까지의 숫자들 중 M개를 선택하는 방법에 대한 논의 1234567for(int i = 0; i
2018.12.28 -
[알고리즘 문제해결 전략]5장. 알고리즘의 정당성 증명
Preview 알고리즘의 정확한 증명을 위해서 수학적인 기법을 동원하여 증명한다. 1. 귀납법2. 귀류법3. 그외 다른 기술들 1. 귀납법 반복적인 구조를 갖는 명제들을 증명하는데 유용하게 사용된다. 단계를 나눠 보자 1단계 증명하고 싶은 사실을 여러 단계로 나누자. 2단계 첫단계의 내용이 성립함을 보이자. 3단계 한 단계에서 증명하고 싶은 내용이 성립한다는 가정하에 그 다음 단계도 성립함을 보이자. 반복문을 통해 귀납법의 정당성을 고려해 보자 1단계 반복문 진입시에 불변식이 성립함을 보인다. 2단계 반복문 내용이 불변식을 깨뜨리지 않음을 보인다. 다르게 말하면, 반복문 내용이 시작할때 불변식이 성립했다면 내용이 끝날 때도 불변식이 항상 성립함을 보인다. 3단계 반복문 종료시에 불변식이 성립하면 항상 우..
2018.12.27 -
[알고리즘 문제해결 전략]4장. 알고리즘의 시간 복잡도 분석
Preview알고리즘의 시간 복잡도는 알고리즘의 수행 시간을 반복문이 수행되는 횟수로 측정한다 --> 주로 입력되는 크기에 대한 함수로 표현된다. 1. 선형 시간 알고리즘2. 선형 이하 시간 알고리즘3. 지수시간 알고리즘4. 시간 복잡도5. 수행시간 어림 짐작하기6. 계산 복잡도 클래스 1. 선형 시간 알고리즘 입력의 크기에 대비해 걸리는 시간을 그래프로 그려보면 직선이 되는 알고리즘 EX>매달 N개의 측정치가 주어질 때, 매달 M달간의 평균을 구해라. ⅰ) 마구잡이로 풀어보기 1234567891011vector GetAvg(const vector& A, int M){ vector ret; int N = A.size(); for(int i = M - 1; i 5. 수행시간 어림짐작하기 입력의 크기를 시간..
2018.12.27 -
[리버싱 핵심원리]1부 5장_스택
오랜만에 써본다 ㅎㅎㅎㅎ 그러면 오늘은 가볍게 스택에 관하여 공부해보도록 하겠다. Stack? 스택이란 무엇일까?스택이란, 제한적으로 접근할 수 있는 나열 구조이다-wiki백과 발췌스택의 역할은?함수 내의 로컬 변수를 임시 저장한다.함수 호출시 파라미터를 전달한다.복귀 주소를 저장한다.스택의 구조는?스택은 FILO 혹은 LIFO 구조 즉, 선입후출 또는 후입선출의 구조를 가진다. 다음은 아래의 그림을 통해서 이해하여보자. [그림 1] 스택 다음 그림을 보면 먼저 들어 온 값의 경우, 나중에 나가게 되고 나중에 들어온 값은 먼저 나가게 됩니다. 이것을 FILO, LIFO 구조라고 한다.
2016.11.02 -
[리버싱 핵심원리]1부 4장_IA-32 Register 기본 설명
OllyDbg를 이용해서나 다른 툴을 사용하여 디버깅을 하다보면 각각의 레지스터들의 용도에 관하여 알아야 할 경우가 있다. 자,그럼 이번엔 레지스터에 관하여 알아보도록하겠다. CPU Register? !레지스터?CPU내부에 존재하는 다목적 저장 공간이다. IA-32의 레지스터IA-32레지스터의 Basic program execution registers는 크게 또 4가지로 나뉜다. 1.General purpose Registers(32bit) --> 8개2.Segment Registers(16bit) --> 6개3.Program Status and Control Registers(32bit) --> 1개4.Instruction Pointer(32bit) --> 1개 [그림 1]Basic program e..
2016.10.27 -
[리버싱 핵심원리]1부 3장_리틀 엔디언 표기법
바이트 오더링이란?데이터를 저장하는 방식을 일컫는 말이다. 크게 빅엔디언과 리틀엔디언으로 나눈다. 그러면 빅엔디언과 리틀엔디언 의 차이점에 관하여 알아보도록 해보자. BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde"; [코드 1] 빅엔디언&리틀엔디언 비교 TYPE NAME SIZE 빅엔디언 리틀엔디언 BYTEb 1 [12] [12] WORDw 2 [12][34] [34][12] DWORDdw 4 [12][34][56][78] [78][56][34][12] charstr 6 [61][62][63][64][65][00][61][62][63][64][65][00] [표 1] 빅엔디언&리틀엔디언 비교 바이트 타입으로 변수를 저..
2016.10.27