분류 전체보기 87

Binary Tree

Non-linear data structureData structure의 유형은 linear 구조와 non-linear 구조로 나뉜다. 두 구조의 차이는 데이터 간의 연결 방식과 접근 방식에 있다.linear 구조: 데이터가 일렬로 나열되어 있으며, 앞에서부터 차례대로 inedx를 통해 순서대로 접근한다. (배열, 스택, 큐)non-linear 구조: 구조가 나무처럼 가지가 뻗어나가거나, 도로처럼 서로 연결된 구조이다. 순차적인 접근이 아닌 연결 관계를 따라 탐색한다. (트리, 그래프)접근 방식이 복잡하더라도 non-linear 구조를 사용하는 이유는 현실 세계의 데이터와 관계가 비선형적이기 때문이다. 예를 들어, 도시와 도시 간의 도로망, 사람들 간의 친구 관계처럼 계층적인 관계를 표현할 때 non-l..

Queue

Queue란?Queue는 먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO) 구조이다.Queue의 구조데이터를 넣으면 rear 쪽으로 들어가고, 데이터를 꺼낼 때는 front 쪽에서 나온다. 하나가 들어가면 꼬리가 길어진다.Queue의 UsageQueue는 FIFO 특성 덕분에 요청을 순서대로 공정하게 처리해야 하는 상황에서 유용하게 사용된다.Task scheduling: 요청이 들어온 순서대로 처리해야 공정하고 예측 가능한 시스템이 된다.Networking: 라우터나 스위치 등은 패킷이 들어오는 순서대로 전송해야 하므로 순서 보장이 중요하다.Customer service: 고객의 요청을 접수한 순서대로 처리하는 것이 공정하다. Queue 구현: array 기반전역 변수 선언#define MAX_SIZ..

Stack

Stacks이란?Stack은 자료를 차곡차곡 쌓는 구조로 LIFO(Last In, First Out) 구조를 가진다. Linked list도 있는데 stack을 쓰는 이유는 함수 호출 순서를 저장할 때와 같이 LIFO 구조가 유리한 경우가 존재하기 때문이다.Stack의 usage(활용)Stack이 LIFO 구조를 따르기 때문에 가장 나중에 넣은 것을 먼저 꺼내야 하는 상황에서 유용하다.Undo operation (되돌리기 기능): 텍스트 편집기에서 Ctrl+Z와 같이 사용자가 수행한 작업을 stack에 저장해두고 되돌릴 때는 가장 최근 작업부터 순서대로 복원한다.Expression evaluation (수식 계산): 계산 중간값이나 연산자를 stack에 쌓아두고 적절한 시점에 pop하여 계산을 수행한다...

Variation of linked lists

Signly linked listsBackgroundTypedeftypedef는 C/C++에서 사용자가 정의한 자료형에 새로운 이름을 부여하여 복잡한 자료형 이름을 선언할 때 간단하게 만드는 데 사용된다.struct Person { char name[50]; int age;};struct Person p1;struct를 직접 사용할 때는 struct Person이라고 매변 명시한 뒤 변수명 p1을 선언해야 한다.typedef struct { char name[50]; int age;} Person;Person p1;typedef를 통해 사용자 지정 struct 변수를 선언할 때 struct 키워드 없이 간단하게 사용할 수 있다. Dynamic memory allocationRAM에서..

Complexity

Time complexity알고리즘의 연산량이 얼마나 걸리는지에 대한 척도를 나타낸다.Complexity 계산 방법Complexity를 계산할 때는 input size(입력 크기)가 매우 큰 경우을 가정한다.차수가 가장 큰 것만 중요하며 나머지 항들은 무시한다.Condfficient(계수)나 더해지는 상수는 무시한다.Notation 종류Big-O natation: Upper bound(worst case)최악의 경우의 알고리즘 성능을 나타낸다. time complexity의 상한을 보장한다.Big-Ω notation: Lower bound(best case)최선의 경우의 알고리즘 성능을 나타낸다. time complexity의 하한을 보장한다.Big-θ notation: Tight bound(best&w..

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction (VAR)

VAR이 무엇이냐?기존 AR 모델이 픽셀을 한 줄씩 순차적으로 생성하는 "Next-Token Prediction" 방식이 가진 한계를 극복하기 위해 "Next-Scale Prediction"방식으로 다중 해상도에서 점진적으로 이미지를 생성하는 새로운 AR 모델이다. 이를 위해 Multi-Scale VQVAE를 활용하며 저해상도부터 점진적으로 고해상도를 생성하는 Coarse-to-Fine 방식을 따른다.  즉, VAR은 기존의 AR 모델이 한 줄씩 혹은, 한 patch씩 생성하며 발생하는 연산량 증가 및 이미지의 구조적 연관선의 문제를 multi-scale 방식을 적용하여 해결한 모델이라고 할 수 있다.기존의 AR (Autoregressive) model의 문제점Autoregressive Token Pre..

논문 리뷰 2025.03.19

Linked lists

ListsArray와 List의 차이Array: RAM에서 연속적인 address에 저장된다. 크기가 고정적이며 프로그램 실행 전에 미리 할당해야 하는 경우가 많다.List: 각 요소(Node)가 다른 memory에 위치하며 각 요소는 pointer로 연결된다. 크기를 유동적으로 조절 가능하며 삽입 및 삭제 작업이 자유롭다.List의 node 구성Node는 Linked List와 같은 자료 구조에서 사용되는 각 element를 의미한다.Node는 value와 pointer로 구성된다.Structers (구조체)user가 정의한 data type이다.sizeof(Structure)는 구조체 내 멤버들의 크기의 합이 아니다그 이유는structure를 선언할 때 compiler에 의해 Alignment Rul..

Pyaudio, 오디오 신호의 녹음과 재생

Pyaudio Pyaudio는 오디오를 다루는 작업을 쉽게 만들어주는 대표적인 라이브러리이다. Python에서 기본으로 제공하는 pakage가 아니므로 먼저 설치해야 한다.pip install pyaudioimport pyaudioPyaudio 의 특징오디오 재생 및 녹음을 지원한다Open Source Library이다Cross-Platform을 지원하며, 운영 체제나 장치가 달라져도 사용할 수 있다.Pyaudio의 Classespyaudio.PyAudioAudio를 어떤 format으로 처리할지 설정open() method를 통해 stream 객체 생성pyaudio.Streampyaudio.PyAudio의 open() method를 통해 생성실제 audio가 processing되는 부분Basic Pya..

Numpy Library

Numpy: 공대생을 위한 필수 LibraryNumpy library는 매우 유용하다. 특히 공대생들에게는 선형대수, 난수 생성, 푸리에 변환 등을 지원하기 때문에 필수적이다. 또한, 반복문을 사용하지 않고 배열 연산이 가능한 다양한 method가 내장되어 있다. method란 독립적으로 정의된 code block인 function과 달리, 특정 object에 속한 함수이다. Numpy는 module이자 package이다. package는 여러 개의 module을 포함하는 모음짐으로 Numpy는 다양한 submodule을 포함하고 있다.Example code using numpyList -> ndarray(n 차원 배열)의 변환import numpy as npa = [1,2,3,4,5]arr = np.a..

Python 기초

Python code의 기본 구조1. Module importCode를 효율적으로 작성하기 위해서 python에서 미리 만들어진 다양한 module을 활용할 수 있다. Python을 잘 사용한다는 것은 곧 module을 잘 활용하는 것과 같다. Module을 import하여 사용할 때는 module의 전체 이름을 사용해야 하지만, as 키워드를 사용하여 약어를 지정해 더 간결하게 사용할 수 있다.2. 함수 구현 부분필요한 함수를 정의하는 부분으로 "def 함수명(매개변수)" 형태로 함수를 선언한다. 함수 내부 코드는 indent(들여쓰기)를 사용하여 구분한다. Python은 {}대신 :와 indent를 활용하여 코드 블록을 구분하므로 올바른 indent가 중요하다.3. 메인 코드 구현 부분프로그램을 실행..