분류 389

Intro Sort(Introspective Sort),,, 다큐먼트

위키디피아에서 두 링크가 있는데, 하나는 Intro Sort 고안한 사람의 발표 논문이고 다른 하나는 아래의 자료인 데 대학교 연구자료인 듯 하다. ralph unden .net home bio flickr twitter misc A guide to Introsort My university, BA Stuttgart, has every IT student do a student research project spanning over the 5th and 6th semester. I applied for a topic that is close to basic informatics. The topic I chose and luckily was assigned to, is the implementation a..

퀵소트 함수, 재귀와 노재귀(Non-Recursive) 형태,,, 동적배열 스택 이용

// 재귀함수 void __stdcall QuickSort(int *arr, int n) { int left, right; int pv, t; // 갯수가 2 이상이면 if(n > 1){ // 피벗 결정 pv=arr[n-1]; // 좌우 인덱스 설정 및 비교, 교환 left=0; right=n-2; while(TRUE){ while(arr[left] pv) --right; // 시작 인덱스보다 작거나 같으면 값 조사 필요 없다. if(left >= right) break; t=arr[left]; arr[left]=arr[right]; arr[right]=t; ++left; --right; } // 피벗 자리와 left 자리 교환 ..

연결리스트 큐 이용 파일 탐색,,, No 재귀호출

스택이나 큐를 사용하면 재귀함수를 non재귀함수로 만들 수 있다. 이전에는 스택을 이용하여 html 소스를 추출하는 것을 만들어 보았다. 이번에는 큐를 사용하여 파일을 찾는 함수를 작성해 보았다. (이재규 c++ 알고리즘도 좀 참고했다.) 연결리스트 자체가 이미 큐로서 충분히 기능할 수 있으므로 별도의 큐 클래스를 만들지 않았다. 큐 클래스로 별도로 구성하면 아무래도 쓸데없는 부분까지 구성해야 하므로 더 번거로운 작업이 될 수 있다. 단순 연결리스트를 생성하고 큐의 put, get 등 기본적 개념을 이용하였다. // 큐를 이용해 Non Recursive 함수로 구성해 봄. // 큐의 경우 FIFO 구조이므로 상위디렉부터 검사하고 하위로 차근차근 검사해나가는 파일탐색에 적용할 수 있다. // 트리의 lev..

연결리스트 스택 이용해 노재귀 형태로 html 소스 뽑아보기

자료구조, 알고리즘 둘러보다가 퍼뜩 떠올라서 구성해 보았다. 스택을 이용하니 노재귀형태로 구성할 수 있었다. 재귀의 오버플로우는 뭐 요즘같이 스레드에 할당되는 기본 스택이 1메가? 정도되는 상태에서 웬만큼 흘리는 코딩을 하지 않으면 거의 발생할 일이 없겠지만서두,,, 이와 별도로 하나의 함수에서 기타 처리를 모두 할 수 있으니 깔끔해진 듯 하다. 이전에 재귀 형태로 돌리는 경우 기타 처리를 하려면 보통 재귀함수 + 기타처리를 하는 함수,,, 2개로 구성하는 경우가 많았다. // 재귀함수 사용하지 않고 스택으로 해결 // 연결리스트 스택으로 구성한다. // 이 함수 성공시 호출부에서는 사용하고 난 후 결과값을 잊지말고 free해줘야 된다. LPWSTR __stdcall GetHtmlSourceNoRecur..

리스트뷰(혹은 트리뷰 등등)의 배경에 그림 넣기입니다

임프랍니다.. 오늘의 팁은... 리스트뷰(혹은 트리뷰 등등)의 배경에 그림 넣기입니다. 리스트뷰 관련 api를 암만 뒤져봐도, 리스트뷰의 배경에 그림을 넣을 방법이 전혀 없다는 걸 알게 될겁니다. 하지만.. 윈도우즈의 바탕화면도 리스트뷰인데.. 그 배경 그림은?? 분명히 방법이 있기는 있다는 말인데.. 그쵸? ^^ 오늘은, 이 리스트뷰의 배경에 무언가를 그려넣기 위해, 리스트뷰를 서브클래싱해봅시다. 서브클래싱? 좀 생소한 말인가요? 뭐.. 별건 아니고.. 원래는 상속받는다는 의미이지만, api 함수를 사용하는데 있어서는 의미가 좀 달라서, 윈도우 프로시저를 바꿔치워서 해당 윈도우에 전달되는 메시지를 가로채는 것을 말합니다. 슬프게도...(?) 오늘의 팁은, 제 작품이 아니고, 컨닝이랍니다. 원 출처는 b..

API 2009.11.05

디바이스 드라이버에서 3가지 버퍼 전달 방식

출처) http://blog.naver.com/khealin/61938919 아래는 그림 파일이 깨지므로 위의 첨부된 파일을 열면 된다. 이번 포스트에서는 애플리케이션과 드라이버 간의 데이터 전송 방법을 알아보도록 한다. 다음의 코드는 COM 포트로 데이터를 내보는 애플리케이션 함수의 일부분이다. 여기서 chBuffer는 애플리케이션 프로세스 내의 가상주소 공간에 존재한다. 이 쓰기 요청을 드라이버가 처리하기 위해서는 chBuffer에 접근할 수 있는 방법이 있어야 한다. 접근이야 아무때라도 가능하겠지만 그 유효성을 보장받을 수 없을 수도 있다. 드라이버는 대부분의 I/O 요청을 비동기적으로 처리하므로 쓰기 요청을 수행한 스레드의 컨텍스트에서 이 쓰기 요청을 수행할 수 없을 수도 있다. 그렇다면 드라이버..

운영체제의 메모리 관리

3장. 메모리 관리 (Memory Management) 메모리 관리 서브시스템은 운영체제에서 가장 중요한 부분 중 하나이다. 초창기의 컴퓨터에 서부터, 시스템에 물리적으로 존재하는 것보다 더 많은 양의 메모리를 필요해왔다. 물리적 인 메모리의 한계를 극복하기 위한 여러 기법들이 개발되었는데, 가상 메모리 기법이 가장 성공적이다. 가상 메모리(virtual memory)는 메모리를 필요로 하는 서로 경쟁하는 프로세스 사이에 메모리를 공유하도록 하여, 시스템이 실제 가진 것보다 더 많은 메모리를 가진 것처 럼 보이도록 한다. 가상 메모리는 컴퓨터의 메모리를 늘리는 일만 하는 것은 아니다. 메모리 관리 서브시스템 은 다음과 같은 것을 제공한다. 넓은 주소공간 운영체제는 시스템이 실제 가진 것보다 훨씬 많은 양..

가변인수 다루기

가변인수, va_start, va_list, va_end 1 가.가변 인수 함수 여기서는 가변 인수 함수에 대해서 알아 본다. 가변 인수의 함수를 만드는 방법에 대해서는 물론이고 가변 인수 함수가 동작하는 원리에 대해서도 자세하게 분석해 볼 것이다. 조금 어렵기는 하지만 포인터를 적절하게 활용하는 예를 볼 수 있으며 포인터로 어떤 일이 가능한지를 경험할 수 있는 좋은 기회가 될 것이다. 가변 인수 함수가 어떻게 동작하는지를 설명할 수 있다면 포인터를 정복했다고 생각해도 좋다. 가변 인수란 말 뜻 그대로 인수의 개수와 타입이 미리 정해져 있지 않다는 뜻이며 그런 인수를 사용하는 함수를 가변 인수 함수라고 한다. 가변 인수 함수의 가장 좋은 예는 C언어의 가장 기초 함수인 printf이다. C언어를 배우는 ..

C, C++ 문법 2009.10.22