본문 바로가기

전체 글

(594)
[JAVA] ArrayList 메소드 [JAVA - 자료구조] ArrayList 메소드 | Junjangsee's Blog ArrayList ArrayList란 자료구조의 한 종류로서 Java에서 가장 많이 사용되는 데이터 스트럭쳐입니다. 알고리즘에서 많이 활용되며, 실무에서 데이터를 다룰 때 입출력하는 부분에서 매우 많은 비중을 junjangsee.github.io
인접 리스트 초기화 후에 접점만큼 add하고 시작해야 함 listGraph만 생성된 상태고 그 안에는 아무것도 없음 Java 인접행렬과 인접리스트를 이용하여 그래프 구현하기 Java 인접행렬과 인접리스트를 이용하여 그래프 구현하기 Java로 인접행렬과 인접리스트를 만들어 그래프를 구현하는 방법에 대해 알아보겠습니다. 1. 그래프 (Graph) 수학적 정의로 그래프는 객 freestrokes.tistory.com
[C] 파일 입출력 [C/C++] 파일에 정수 쓰기, 읽기 1] 파일에 정수 쓰기 (문제) 28, 34, 35, 43을 파일 "4num.txt"에 써라 - 형식 : fprintf(stream, "%d%d%d%d",a,b,c,d); #include FILE *fi; main(){ int a=28,b=34,c=35,d=43; fi=fopen("4num.txt","w");.. secrys.tistory.com 문자열 쓰기 C 언어 코딩 도장: 70.3 파일에 문자열 쓰기 지금까지 서식을 지정해서 파일에 문자열을 쓰거나 읽었습니다. 그럼 서식 없이 문자열을 그대로 쓰거나 읽을 수는 없을까요? fputs 함수를 사용하면 문자열을 그대로 파일에 쓸 수 있습니다(stdio dojang.io
[Greedy Algorithm] Coin Change, greedy choice property www.cs.toronto.edu/~denisp/csc373/docs/greedy-coin-change.pdf www.chegg.com/homework-help/introduction-to-algorithms-2nd-edition-chapter-16.p-solutions-9780262032933
최대, 최소 Heap 힙 정렬은 완전 이진 트리의 한 종류인 힙 트리를 이용하여 정렬하는 알고리즘입니다. 먼저 힙 트리가 무엇인지 살펴본 후에 힙 정렬 알고리즘을 알아보고 분석 및 구현해 봅시다. 힙 트리는 부모의 값이 자식의 값보다 큰 값을 보장하는 최대 힙과 작은 값을 보장하는 최소 힙이 있습니다. 최대 힙으로 표현한 힙 트리의 루트에는 가장 큰 값을 갖고 최소 힙으로 표현하면 가장 작은 값을 갖습니다. 힙 트리처럼 완전 이진 트리는 배열로 많이 표현합니다. 완전 이진 트리가 아닌 이진 트리도 배열로 표현할 수 있지만 트리의 높이가 높아지고 한 쪽으로 기울어질 수록 비어있는 공간이 많아져서 메모리 효율이 떨어집니다. 하지만 완전 이진 트리는 마지막 자료가 있는 공간까지 모두 사용하여 빈 공간이 생기지 않습니다.
우선순위 큐 우선순위 큐는 평범한 큐나 스택과 비슷한 축약 자료형이다. 그러나 각 원소들은 우선순위를 갖고 있다. 우선순위 큐에서, 높은 우선순위를 가진 원소는 낮은 우선순위를 가진 원소보다 먼저 처리된다 우선순위 큐가 힙이라는 것은 널리 알려진 오류이다. 우선순위 큐는 "리스트"나 "맵"과 같이 추상적인 개념이다; 마치 리스트는 연결 리스트나 배열로 구현될 수 있는 것과 같이, 우선순위 큐는 힙이나 다양한 다른 방법을 이용해 구현될 수 있다. 우선순위 큐는 최소한 다음의 연산이 지원 되어야 한다: insert_with_priority: 하나의 원소를 우선순위를 지정하여 큐에 추가한다. pull_highest_priority_element: 가장 높은 우선순위를 가진 원소를 큐에서 제거하고 이를 반환한다.이것은 "p..
Darknet YOLO를 실행시키기 위해서는 Darknet이 필요하다. Darknet은 Joseph Redmon이 독자적으로 개발한 신경망 프레임워크(neural network framework)로서 dnn(deep neural network)들을 학습시키고 실행시킬 수 있는 틀(framework)이다. 그리고 yolo는 학습된 신경망(결과물) 중 하나이다. Darknet을 이용하면 yolo 뿐만 아니라 AlexNet, VGG-16, Resnet, Densenet 등 기존의 정통 주류의 dnn(deep neural network)들도 돌려 볼 수 있다. 위 과정까지 마무리 되었다면 Darknet 및 YOLO의 설치는 끝났다. git에서 다운받은 Darknet에는 예제로 주어진 딥러닝 모델과 weight들이 제공되고 있..
Huffman code 허프만 부호화 또는 허프만 코딩(Huffman coding)은 입력 파일의 문자 빈도 수를 가지고 최소힙을 이용하여 파일을 압축하는 과정이다. 허프만 코드(이진코드)는 Unix에서 파일압축에 사용되고, JPEG 이미지 파일 또는 MP3 음악 파일을 압축하기 위한 서브루틴으로도 활용된다. 주어진 문자열을 트리를 이용해 2진수로 압축하는 알고리즘 중 하나이다. 최소 힙을 이용한다. 고정 길이 코드(fixed length code) vs 접두어 코드(prefix code) 고정 길이 코드는 대표적으로 아스키 코드가 있다. 아스키 코드는 항상 8bit의 길이를 가지고있다. 다루기에는 간단하지만, 저장 공간 활용에 있어서 제한이 있다. 이를 해결하기 위해서 가변 길이 코드(variable length code)가..
설치된 package 확인하기
E45: 'readonly' option is set (add ! to override) 해결 방법 1. sudo 명령어를 통해서 관리자(ROOT) 권한으로 전환 2. 문제의 파일을 열어서 수정해보세요. 명령어 공유 $ sudo vi 파일이름 추가정보 위의 방법으로 해결이 안될 경우, 저장하실때 wq 명령어 대신 w! 명령어를 사용해 보세요! [리눅스] E45: 'readonly' option is set (add ! to override) 안녕하세요. 플랫폼공작소입니다. 오늘은 [리눅스] E45: 'readonly' option is set (add ! to override) 에러를 해결하는 방법을 공유하려합니다. vi에디터를 사용하시다가 E45: 'readonly' option is set (ad.. doctorson0309.tistory.com
E: unable to locate package E: unable to locate package libncurses5-dev 우분투 11.04의 경우에는 build-essential 패키지는 기본적으로 설치되어 있었으나 9.10에서 테스트할 때에는 build- essential 패키지 조차도 설치되어 있지 않았으며 apt-get install 명령어로 설치 시도시 다음과 비슷한 에러들이 발생 하였다. E: unable to locate package build-essential E: unable to locate package libncurses5 E: unable to locate package libncurses5-dev E: unable to locate package bin86 문제의 원인 : 우리가 사용하는 우분투의 버전에는 해당 버전마다 ..
라이브러리 .a 파일 .so 파일 정적라이브러리 - 동적(공유)라이브러리에 비해 실행 속도가 빠르고 배포에 제약이 없음 - 다만, 해당 라이브러리를 필요로 하는 모든 경우 같은 정적 라이브러리가 링크되기 때문에 배포 파일들의 사이즈가 커짐 - 그러므로 하드디스크 공간도 더 차지하고 메모리도 더 많이 차지함 - 그러나 유닉스 시스템의 경우 그때그때 필요한 부분만 메모리에 로딩하는 demand paging을 사용하기 때문에 정적인 라이브러리의 메모리 사용률과 공유 라이브러리의 메모리 사용률의 차이가 크지 않음 시스템에서 응급시에 필수로 쓰이는 유틸리티와 실행속도를 극대화해야 하는 몇몇 서버를 제외하고는 대부분 동적 라이브러리를 사용한다. *shared library와 dynamic link library는 다른 개념이다 그러나 대부분의 경우..
동적 라이브러리(shared library)와 Linker/Loader 이해하기 이제는 직접 C 언어를 사용하여 개발을 할 일이 많지 않지만 C 언어로 만들어진 프로그램과 라이브러리는 여전히 서비스 인프라에서 중요한 위치를 차지하고 있습니다. linux 등 운영체제가 C 로 만들어져 있고 편리하게 개발을 할수 있는 생산성 좋은 script(ruby 나 python, PHP 등..) 언어의 엔진들은 대부분 C 로 제작되었고 openssl, database driver 등의 기능은 C 로 작성된 라이브러리를 호출하여 언어의 기능을 확장하고 있습니다. 운영체제에서 프로그램이 어떻게 동작하는지 이해하는 것은 견고한 서비스를 만들고 문제가 생겼을 때 대응을 하는데 도움이 되는 지식이지만 바쁜 시대에서 이런 지식을 체계적으로 학습하기는 쉽지가 않습니다. 그래서 프로그램의 동작 방식을 이해하기 ..
Greedy Algorithm2 • What did we do for activity selection? 1. Determine the optimal substructure. 2. Develop a recursive solution. 3. Prove that at any stage of recursion, one of the optimal choices is the greedy choice. Therefore, it’s always safe to make the greedy choice. 4. Show that all but one of the subproblems resulting from the greedy choice are empty. 5. Develop a recursive greedy algorithm. 6. Convert ..
Queue / Stack 큐는 컴퓨터의 기본적인 자료 구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO 구조로 저장하는 형식을 말한다. 영어 단어 queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 된다.
VTA(Versatile Tensor Accelerator ) §The Versatile Tensor Accelerator (VTA) is an extension of the Apache(incubating) TVM framework designed to advance deep learning and hardware innovation. §VTA is a programmable accelerator that exposes a RISC-like programming abstraction to describe compute and memory operations at the tensor level. §VTA to expose the most salient and common characteristics of mainstream deep learning accelerat..
[C++] class 클래스 (class) OOP의 가장 핵심적인 개념인 클래스는 "구조체가 확장 된 것"이라 생각하면 된다. C에서 구조체는 타입이 다른 변수의 집합이라 보았다면, C++에서 클래스는 타입이 다른 변수의 집합뿐만 아니라, 함수까지 포함 된 것이다. 선언 방법은 C의 구조체 선언문에서 struct 를 class로 바꾸면 되며, public 이나 private 와 같은 엑세스 지정자도 추가 할 수 있다. 생성자 (Constructor) 클래스를 선언하게 되면 그 클래스는 메모리에 객체로써 자리를 잡게 된다. 그러나, 이 객체는 해당 메모리에 자리만 잡고 있을 뿐이지, 초기화는 되지 않으므로, 생성자를 통해서 초기화를 해줄 필요가 있다. 기본적으로 객체를 선언하였다면, 객체를 이루는 변수들에 값을 대입함으로써 객..
FPGA ( field programmable gate array ) FPGA(field programmable gate array, 필드 프로그래머블 게이트 어레이)는 설계 가능 논리 소자와 프로그래밍이 가능한 내부 회로가 포함된 반도체 소자이다. 설계 가능 논리 소자는 AND, OR, XOR, NOT, 더 복잡한 디코더나 계산기능의 조합 기능같은 기본적인 논리 게이트의 기능을 복제하여 프로그래밍할 수 있다. 대부분의 FPGA는 프로그래밍 가능 논리 요소 (FPGA 식으로는 논리 블록이라고도 함)에 간단한 플립플롭이나 더 완벽한 메모리 블록으로 된 메모리 요소를 포함하고 있다. 프로그램이 가능한 내부선 계층구조는 FPGA의 논리블록을 시스템 설계자가 요구하는 대로 단일 칩 프로그래밍가능 브레드보드처럼 내부연결을 할 수 있다. 이 논리블록과 내부선은 제조공정 이후에 소비자..
프로세서 기술 마이크로 오퍼레이션 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. ko.wikipedia.org
micro-operations, micro-ops, μops, 마이크로 조작, 마이크로 연산 컴퓨터 중앙 처리 장치에서 마이크로 오퍼레이션(micro-operations, micro-ops, μops, 마이크로 조작, 마이크로 연산)은 일부 디자인에서 복잡한 기계어를 구현하기 위해 사용되는 세세한 저급 명령어이다. (이 문맥에서 매크로 명령이라고 부르기도 한다)[2]:8–9 일반적으로 마이크로 오퍼레이션은 하나 이상의 레지스터에 저장된 데이터의 기초적인 오퍼레이션을 수행하며, 여기에는 CPU 레지스터 간 또는 레지스터와 외부 버스 간 데이터 전송, 그리고 레지스터의 산술 또는 노리 오퍼레이션 수행이 포함된다. 일반 페치-디코드 실행 주기에서 매크로 명령의 각 단계는 실행 중에 분해되므로 CPU는 일련의 마이크로 오퍼레이션을 통해 결정하고 진행한다. 마이크로 오퍼레이션의 실행은 CPU의 제어 장치..
[C&C++] header 파일 선언 이유 .cpp 파일로 만들어진 오브젝트 파일에 있는 함수들의 내용을 다른 소스 파일에서 사용할 수 있도록 하기 위함입니다. A.cpp 파일에서 B.cpp 파일에 들어있는 함수나 클래스를 사용하기 위해서는 함수의 프로토 타입이나 클래스 선언 등의 정보가 필요합니다. (그래야 어떤 함수(또는 메소드)를 호출할때 인자값이 필요하고, 안필요하고와 리턴 타입을 알 수 있으니까요.) 그런 정보들을 파악하기 위해서 헤더 파일을 만들어서 관리합니다. 그리고, 헤더파일의 사용에 대해서 질문하셨는데.. 이는 라이브러리를 생각하시면 간단합니다. 라이브러리와 같은 것들은 cpp 파일을 제공하지 않는 경우가 많기 때문입니다. 그리고, 무엇보다 관리와 공유가 편하다는 장점이 있습니다. :)
함수 선언 이유 엄연히 함수의 정의가 있는데 왜 선언이 필요할까...??? ​ 첫째, 함수 선언에서 반환값의 형태를 확인합니다. 컴파일러는 함수를 호출한 자리에 반환값과 같은 형태의 저장 공간을 준비합니다. 즉, 정수를 반환하면 호출한 자리에 int형 공간을 확보하고 실수를 반환하면 double형 공간을 확보합니다. 따라서 함수를 호출하기 전에 선언을 통해 반환형을 미리 컴파일러에게 알릴 필요가 있습니다. 물론 함수의 정의에서도 반환형을 확인할 수 있고 컴파일러는 위에서 아래로 한줄씩 컴파일하므로 함수 호출 이전에 함수를 정의하는 방법도 있습니다. ​ main 함수 위에 add함수를 정의하면함수의 정의에 원형이 포함되므로 따로 함수를 선언할 필요가 없습니다. 이 경우 실행 순서에는 변함이 없습니다. 프로그램은 항상 ma..
[Greedy Algorithm] coin change 이 탐욕 알고리즘으로 거스름돈 교환 문제를 풀게 된다면, 큰 단위의 동전이 작은 단위의 동전의 배수가 되어야 탐욕 알고리즘을 적용할 수 있습니다. 위 같은 경우는, 10원 동전은 1과 5의 배수이고, 5는 1의 배수이므로 탐욕 알고리즘을 적용할 수 있었던 것입니다. 유의하셔야 할 점은 매 순간마다 최선의 선택을 하여 나온 해가 반드시 전체적인 최적해는 아니라는 것입니다. 그렇기 때문에, 탐욕 알고리즘을 사용할 때에는 전체적인 최적해 인지를 항상 염두해 두실 필요가 있습니다. 즉, 탐욕 알고리즘을 사용하시기 전에 탐욕 알고리즘을 사용해도 되는지 검증 단계를 거치시는게 좋습니다. greedy 알고리즘을 사용하면 좋은 경우 1. 최적 부분 구조 (Optimal Substructure) - 부분 문제를 최적화하..
[Basic] DRAM, SRAM 메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 [반도체 8대공정] 메모리 SRAM&DRAM (Feat.엔지닉) 반도체 공부 2일차! 반도체 메모리 소자인 SRAM과 DRAM 에 대해서 공부했다 읽기 쓰기 동작 너무 ... blog.naver.com
[DFS] 저울 추 ( p. 197 ) 오른쪽에 모든 추를 놓아본다. 마지막 추에 대해 무게가 안 맞으면 해당 추를 왼쪽에 놓아본다. 반복문으로 중심이 되는 추가 있다. 중심이 되는 추에 대해 위의 과정을 반복하는 것이다. ex) n=10일 때, 추 ={ 1, 3, 9 } 중심 추 1일 때(반복문에서 i=0) (10) / 1, 3, 9 9 (10) / 1, 3 3, 9, (10) / 1 1,3, 9, (10) / 중심 추 3일 때(반복문에서 i=1) (10) / 3, 1, 9 9 (10) / 3, 1 1, 9, (10) / 3 3, 1, 9, (10) / 중심 추 9일 때(반복문에서 i=2) (10) / 9, 1 ===============> 끝 3 3 (10) / 9, 1 1, 3, (10) / 9 9, 3, 1, (10) / 1. 어떤 작..
ILP( instruction level parallelism ), TLP( thread level parallelism ) - Thread Level Parallelism (TLP): Multi-Threading => 프로그램 전체에서, 수행하는 기능에 따라 쓰레드를 구분하고, 그 중 서로 independent한 쓰레드들을 병렬적으로 수행하는 것을 의미한다.​ => TLP explicitly represented by the use of multiple threads of execution that are inherently parallel => Use multiple instruction streams to improve Throughput of computers that run many programs Execution time of multi-threaded programs (Latency가 향상되는 것은 아니다) ※ ..
Greedy Algorithm 그리디 알고리즘은 동적 프로그래밍 사용 시 지나치게 많은 일을 한다는 것에서 착안하여 고안된 알고리즘입니다. 동적 프로그래밍을 대체하는 것은 아니고 같이 쓰이며 서로 보완하는 개념입니다. 그리디 알고리즘은 탐욕 알고리즘 또는 욕심쟁이 알고리즘이라고도 불리는데요. 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법입니다. 이렇게 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘이죠. 물론 모든 경우에서 그리디 알고리즘이 통하지는 않습니다. 쉬운 예를 들자면 지금 선택하면 1개의 마시멜로를 받고, 1분 기다렸다 선택하면 2개의 마시멜로를 받는 문제에서는, 그리디 알고리즘을 사용하면 항상 마시멜로를 1개밖에 받지 못합니다. 지금 당장 최선의 선택은 마시멜로 1개를 받는 거지..
tiling, blocking, batching A survey of techniques for optimizing deep learning on GPUs The rise of deep-learning (DL) has been fuelled by the improvements in accelerators. Due to its unique features, the GPU continues to remain the most … www.sciencedirect.com
[DFS] 두 색 칠하기, bicoloring ( p. 171 ) for i 점의 갯수 G[v][i] 연결되어 있고 색이 현재 칠하려는 색과 같다면 can = 0 칠할 수 있는 자리가 아니다. can이 0 이라면 다시 현재 V정점 visited[V] 0으로 칠하고 return for i 점의 갯수 G[v][i] 연결되어 있고 색이 안칠해진 부분이라면 dfs( i, 1 ) // 그 정점으로 가서 1로 칠하고 나머지 연결된 부분 확인 dfs( i, 2 )
[DFS] 치즈 ( p. 161 ) 바깥 공기 -1 바깥 공기에 붙어 있고 1인 위치 +1 done() : 녹을 자리에 있다면 두 군데 이상에서 +1이 됐을 것이므로 2보다 클 것이다. -> 0으로 만들어준다. -1인 자리 기존에 0이었던 자리 -> 0으로 만들어준다. 2나 1인 자리는 아직 녹지 않았거나 0인 자리를 탐색할 때 건드려지지 않은 부분이다. -> 다시 1로 만든다. 다시 탐색