목록분류 전체보기 (213)
archive

1. 어떤 문제를 동적 프로그래밍으로 풀이하는가? -동적 프로그래밍 : 큰 문제의 해답에 작은 문제의 해답이 포함되어있고, 이를 재귀호출 알고리즘으로 구현하면 지나친 중복이 발생하는 경우에 이 재귀적 중복을 해결하는 방법이다. - 피보나치 수열이 가장 대표적인 예시 -피보나치 수열을 재귀로 표현하면 다음과 같다 fib(n): if(n=1 or n=2): return 1 else return fib(n-1)+fib(n-2) -위와 같은 재귀적 알고리즘은 간명하지만 때때로 엄청난 비효율을 초래할 수 있으며, n의 피보나치 수를 구하는 앞의 재귀적 알고리즘은 지수 함수에 비례하는 시간이 들게 된다. -이것은 호출 결과를 한 번만 구해 저장해두었다가 나중에 사용만 하면 될 것을, 매번 호출함으로써 비효율이 발생..

1. 힙 정렬 (Heap sort) - 합 정렬은 대표적인 우선순위 큐인 힙 자료구조를 사용하는 정렬 알고리즘이다. -지금까지 소개한 정렬 알고리즘들이 모두 주어진 배열 자료구조 위에서 정렬한 것에 반해, 힙 정렬은 힙 자료구조를 사용해서 정렬 -[힙의 정의] -힙은 다음 두 조건을 만족해야 한다 : 완전 이진 트리 구조를 사용해야 한다, 모든 노드는 값을 갖고, 자식 노드 값보다 크거나 같다. -조건들을 만족하면 우선순위가 가장 큰 원소가 루트에 자리하게 된다 -[힙의 구성] - 2. 기수 정렬 -기수 정렬(Radix Sort)는 원소들이 모두 상수 k개 이하의 자릿수를 가진 자연수와 같은 특수한 경우에 (자연수가 아닌 제한된 길이를 가진 알파벳 등도 해당함) 사용 가능한 알고리즘이다. -우선 가장 낮..

##이전 포스팅 추가 사용자 수준 쓰레드 vs 커널 수준 쓰레드 쓰레드 운영 방식 비교 표 사용자 수준 쓰레드 커널 수준 쓰레드 커널의 개입이 작다 커널의 개입이 크다 런 타임 시스템이 필요하다 런 타임 시스템이 필요 없고 커널이 직접 한다 속도가 빠르다 속도가 느리다 문맥 교환이 적다 문맥 교환이 많다 독자적 알고리즘이 필요하다 독자적 알고리즘이 필요 없다 대형시스템에 적당하다 대형 시스템에 부적합하다 구현이 어렵다 구현이 쉽다 커널을 스스로 호출하지 못 한다 커널을 스스로 호출한다 CPU 사용을 해제하지 못 하면 시스템이 중단된다. 사용을 해제하지 못 하면 운영체제가 지원한다 사용자 수준의 쓰레드 * 쓰레드 라이브러리를 사용자 영역에 두고 운영체제 커널은 단일 프로세스만을 관리한다 * 쓰레드 라이브러..

[3-1] 프로세스와 쓰레드 1. (remind) 프로세스의 두 가지 특성 -자원 소유권 : 프로세스는 자신의 이미지 (프로그램, 데이터, 스택, 속성의 집합) 를 위한 가상 주소 공간을 포함한다 :운영체제는 보호 기능을 수행하여 프로세스들 간에 자원에 대한 불필요한 간섭이 일어나는 것을 막는다. -스케줄링/수행 : 프로세스 수행은 하나 이상의 프로그램을 통과하는 수행 경로를 따른다 (궤적) :한 프로세스는 다른 프로세스들과 번갈아가면서 (인터리빙) 수행될 수 있기 때문에, 따라서 프로세스는 수행상태와 디스패칭 우선순위를 가지며, 운영체제에 의해 스케줄되고 디스패치되는 개체이다 -이러한 두 가지 특성이 서로 독립적이며 운영체제에 의해서 독립적으로 취급될 수 있음을 알아야 한다. -이러한 사항은 많은 운영..
1. 각 mbti INFP ENFP INFJ ENFJ INTP ENTP INTJ ENTJ ISFP ESFP ISFJ ESFJ ISTP ESTP ISTJ ESTJ 기승전결을 분류해서 텍스트 요약 -> 각각의 상황에서 어떻게 해결을 할 것인지 내가 소설 속 주인공이려면? 이거 너무... 연구 전문성이 없는 거 같 CLOVA Chatbot - AI Services - NAVER Cloud Platform 네이버 클라우드 플랫폼 (ncloud.com) 네이버 클라우드에서 제공하는 챗봇 서비스 사용해도 좋을 거 같은데... Gradio ChatInterface 문서 네이버는 다 네이버가 해 주는 대신 얜 직접 호출해서 내가 코드로 다 구현할 수 있는 거 같다 mbti 별 내가 이 소설 속 등장인물이 된다면 소설의..

1. 병합 정렬 -병합 정렬은 일단 입력을 반으로 나누고, 전반부와 후반부를 각각 독립적으로 정렬한다. -마지막으로 정렬된 두 부분을 합쳐서, 즉 병합하여 정렬된 배열을 얻는다. -전반부와 후반부를 정렬할 때에도 역시 반으로 나눈 다음 정렬해서 병합한다. -크기만 절반으로 줄어들었을 뿐 원래의 정렬 문제와 성격이 똑같다는 것을 알 수 있다. -요약하면, 병합 정렬은 자신에 비해 크기가 반인 문제를 두 개 푼 다음, 이들을 병합하는 작업을 재귀적으로 반복한다. - 이를 코드로 구현하게 되면, tmp[]라는 빈 배열을 하나 형성하고 경쟁을 하여 변수 하나씩 빈 배열에 옮긴다 -병합 정렬의 수행 시간은 최악, 최선, 평균 모든 경우에 O(n log n)이다. ** 스위칭 병합정렬 -이론적으로 보면 병합 정렬은..