반응형

프로그래밍/Computer Science 23

[Data Structure] Linear - (2) Linked List - Doubly Linked List

더블리 링크드 리스트 (Doubly Linked List) 노드들이 다음 노드 뿐만 아니라 이전 노드에 대한 레퍼런스까지 가진 링크드 리스트를 더블리 링크드 리스트라고 한다. 앞과 뒤의 노드에 대한 레퍼런스를 가지고 있기 때문에 양 방향으로 탐색할 수 있는 특징이 있다. 노드(Node) class Node: """더블리 링크드 리스트 노드""" def __init__(self, data) -> None: self.data = data self.next = None # 다음 노드에 대한 레퍼런스 self.prev = None # 이전 노드에 대한 레퍼런스 def __str__(self) -> str: return str(self.data) # 노드 인스턴스 node1 = Node(3) node2 = Nod..

[Data Structure] Linear - (2) Linked List - Singly Linked List

링크드 리스트는 파이썬의 리스트처럼 선형 자료 구조로서, 데이터를 순서대로 저장할 수 있고 계속해서 요소를 추가할 수 있다. 이는 데이터와 다음 노드에 대한 레퍼런스를 가진 노드를 사용해 구현하는데, 노드들은 메모리 공간 여기저기 흩어진 상태로 저장되지만 각 노드에는 다음 노드나 이전 노드에 대한 레퍼런스를 가지고 있어서 선형적으로 다음 노드를 탐색할 수 있는 특징이 있다. 싱글리 링크드 리스트 (Singly Linked List) 노드들이 다음 노드에 대한 레퍼런스만을 가진 링크드 리스트를 싱글리 링크드 리스트라고 한다. 다음 노드에 대한 레퍼런스를 가지고 있기 때문에 한 방향으로 탐색할 수 있는 특징이 있다. 노드(Node) class Node: """노드 클래스""" def __init__(self..

[Data Structure] Linear - (1) Array

파이썬 리스트는 c의 배열을 이용해 만들어졌다. 두 자료구조의 큰 차이점은 정적 배열(Static Array)이냐 동적 배열(Dynamic Array)이냐다. c의 배열은 정적배열로서, 처음에 메모리에 배열의 크기를 정해놓고 시작한다. 즉, 크기가 고정되어 있다. 반대로 파이썬의 리스트는 동적배열로, append()메소드를 이용해 데이터를 추가할 때마다 배열의 크기가 가변적으로 늘어날 수 있고 반대로 del 예약어 등으로 크기가 자동적으로 줄어들 수도 있다. 01. 정적 배열 vs 동적 배열 (Static Array versus Dynamic Array) 위에 언급한 것처럼 c의 배열은 정적 배열이고, c의 배열을 이용해 만든 파이썬의 리스트는 동적 배열이다. 정적 배열 우선 c의 배열은 int newA..

[Overview] 03. Operating Systems - (2) Kernel and Virtual Machine

01. 커널 (Kernel) 02. 가상 머신 (Virtual Machine) 운영체제(Operating System)가 제공하는 서비스에는 크게 커널(Kernel)과 사용자 인터페이스(User Interface; UI)가 있다. 그 중에서도 특히 커널은 운영체제의 핵심 서비스를 담당하며, 사용자 인터페이스는 윈도우의 바탕화면 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로다. 커널에 대한 설명은 잠시 미뤄두고, 사용자 인터페이스의 종류는 그래픽 유저 인터페이스(Graphic User Interface; GUI)와 커맨드 라인 인터페이스(Command Line Interface; CLI)가 있다. 전자는 앞서 말한 윈도우의 바탕화면처럼 그래픽을 기반으로 컴퓨터와 작용할 수 있는 인터페이스이며, 후자는 명..

[Overview] 03. Operating Systems - (1) The History of Operating Systems

01. 운영체제의 발전 (The History of Operating Systems) 운영체제(Operating System)는 컴퓨터의 전반적인 운영을 제어하는 소프트웨어다. CPU, 메모리, 보조기억장치, 입출력장치와 같은 시스템 자원(resource)를 실행한 프로그램에 적절히 할당하고 제어하는 중요한 역할을 한다. 01. 운영체제의 발전 (The History of Operating Systems) 운영체제는 아주 단순한 프로그램으로 시작했다. 운영체제는 20세기 중반 큰 방만한 초기 컴퓨터를 조작할 때 작업을 단순화시키기 위해 만들어졌다. 당시 컴퓨터는 하나의 프로그램을 실행시키기 위해 천공 카드나 테이프로 컴퓨터에 명령을 입력해야 하는 등 준비 기간이 길었다. 또한 한 가지 작업이 진행중인 동..

[Overview] 02. Data Manipulation - (2) Program Execution

01. 프로그램의 실행 (Program Execution) 1. 프로그램 로드 2. 인출(Fetch) 3. 해석(Decode) 4. 실행(Execute) CPU의 전체적인 실행과정을 살펴보기 위해서는 레지스터 중 특별한 용도가 지정되어 있는 명령 레지스터(Instruction Register)와 프로그램 카운터(Program Counter)를 살펴봐야 한다. 명령 레지스터는 실행할 명령을 차례대로 저장하는 레지스터이며, 프로그램 카운터는 다음에 실행할 명령의 주소를 가지고 있으며 현재 프로그램이 어디까지 실행됐는지 추적하는 수단으로 사용된다. 01. 프로그램의 실행 (Program Execution) 프로그램의 실행, 즉 CPU의 작업은 기계 주기(machine cycle)이라는 3단계 과정을 반복함으로..

[Overview] 02. Data Manipulation - (1) Computer Architecture and Machine Language

01. CPU 기초 (CPU Basics) 02. 기계어 (Machine Language) RISC (Reduced Instruction Set Computer) VS. CISC (Complex Instruction Set Computer) 명령의 종류 (Type of Instructions) 1장에서는 주저장장치인 메모리에 데이터를 어떻게 저장하는지에 대해 공부했다면 2장에서는 저장된 데이터를 컴퓨터가 어떻게 조작하는지에 대해서 공부할 것이다. 데이터 조작을 제어하는 컴퓨터 안의 회로는 중앙처리장치(Central Processing Unit, CPU) 혹은 프로세서(Processor)라고 불린다. 초기의 ENIAC과 같은 컴퓨터에서 CPU는 선반 여러 개에 나누어진 큰 장치였으나 현대로 오면서 CPU의..

[Overview] 01. Data Storage - (4) Data Compression

01. 일반적인 데이터 압축 기법 (Generic Data Compression Techniques) RLE(Run Length Encoding) 빈도 종속 인코딩(Frequency-dependent Encoding) 차등 인코딩(Differential Encoding) 사전 기반 인코딩(Dictionary Encoding) LZW 압축 알고리즘(Lempel-Ziv-Welsh Compression Algorithm) 데이터의 저장이나 전송을 위해 원래 정보를 유지하면서 데이터의 크기를 줄이는 것이 필수적이다. 각 분야에 맞게 고안된 압축 기법들이 있다. 01. 일반적인 데이터 압축 기법 (Generic Data Compression Techniques) 데이터 압축 방법은 무손실(lossless) 압축 ..

[Overview] 01. Data Storage - (3) The Binary System

01. 2의 보수 ( Two's Complement ) 02. 소수의 표현 ( Fractions in Binary ) 0과 1로 표현되는 2진법 체계는 컴퓨터에서 보편적으로 사용된다. 2진법의 표기, 덧셈 같은 기초적인 내용은 건너 뛰도록 한다. 01. 2의 보수(Two's Complement) 2의 보수는 컴퓨터가 음수를 저장하기 위해 사용하는 정수 표현 체계 중에 하나이다. 4개의 bit로 구성된 머신이 있다고 하자. 이 머신은 2^4개의 경우의 수를 나타낼 수 있으므로 0 ~ 15 범위의 수를 저장할 수 있다. 하지만 음수를 표현해야 한다면 어떨까? 이를 위해서 범위의 절반을 음수에 할당한다. 그렇게 되면 4bit 머신의 경우 -8 ~ 7까지의 수를 저장할 수 있다. 또한 최상위 비트는 부호를 나타..

[Overview] 01. Data Storage - (2) Main Memory

컴퓨터는 데이터를 저장하기 위해 수많은 비트를 저장할 수 있는 회로들을 가지고 있다. 이 회로 안에 비트를 저장할 수 있고 이 비트 저장소를 컴퓨터의 주기억장치(Main Memory)라고 한다. 01. 메모리의 구성(Memory Organization) 주기억장치는 8bit로 이루어진 셀(cell)이라는 기초 단위들로 구성된다. 8bit로 된 열은 바이트(byte)라고 부르며, 메모리의 한 셀은 보통 1byte의 용량을 갖는다. 가전제품에 내장된 컴퓨터의 메모리는 수백 개의 셀을 갖지만, PC나 스마트폰의 경우 메모리 안에 수십억 개의 셀을 가질 수도 있다.(1billions cell = 약 1GB) 우리는 메모리 셀 안의 비트들이 한 줄로 배열되어 있다고 생각할 수 있는데, 이때 개념적으로 비트의 가장..

반응형