본문 바로가기

컴퓨터 과학(CS)29

컴퓨터 동작 원리: BIOS와 부트 로더 참고: 운영체제(KOCW 양희재 교수님) 컴퓨터의 메모리 계층 구조를 공부하기 전에 컴퓨터가 동작하는 원리를 먼저 이해해야 속이 편한다. https://bentist.tistory.com/62 컴퓨터 구조와 메모리 계층 구조(Memory hierarchy) 참고: 위키피디아, https://www.samsungsemiconstory.com 메인보드 컴퓨터 내에서 기본 회로와 부품들을 담고 있는 가장 기본적이고 물리적인 하드웨어이다. 마더보드(mother board) 또는 주기판이라고도 한 bentist.tistory.com 1. 컴퓨터가 처음에 켜지면? 컴퓨터가 켜지자마자 메인보드에 내장된 부품인 ROM을 자동으로 읽어서 해야 할 일들을 하나씩 수행한다. 그래서 가장 먼저 ROM에 기본으로 설치되어 있는.. 2022. 1. 13.
컴퓨터 구조와 메모리 계층 구조(Memory hierarchy) 참고: 위키피디아, https://www.samsungsemiconstory.com 메인보드 컴퓨터 내에서 기본 회로와 부품들을 담고 있는 가장 기본적이고 물리적인 하드웨어이다. 마더보드(mother board) 또는 주기판이라고도 한다. 메인보드의 구성에는 CPU 소켓, 메모리 슬롯, 칩셋, 그리고 각종 확장카드 슬롯 및 저장장치 포트 등이 있다. CPU와 프로세서, 코어, 스레드 컴퓨터를 뇌에 비유하면 단기기억 담당은 RAM, 장기기억은 하드디스크, CPU는 사고를 담당하는 대뇌피질이다. 대뇌피질 없이 인간의 사고가 성립하지 않듯이 컴퓨터도 CPU 없이는 그냥 전기 먹는 기계가 된다. 1. CPU 트랜지스터라고하는 반도체를 이용해서 만들어진 CPU는 수십억개의 트랜지스터를 통해 전기 신호를 1(켜짐).. 2022. 1. 12.
합병 정렬(merge sort) 모두를 위한 컴퓨터 과학(데이비드말란 교수님) 강의 1.1. 합병 정렬 합병 정렬(병합 정렬)은 원소가 한 개가 될 때까지 계속해서 반으로 나누다가 다시 합쳐나가는 정렬을 하는 방식이다. 분할 정복(divide and conquer) 알고리즘의 하나로 분할 정복은 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다 1.2. 합병 정렬 구현 1) 분할(Divide): 입력 배열을 같은 크기의 2개의 부분 배열로 분할한다. n개의 원소가 있을 때 배열을 계속해서 반으로 나누기 때문에 호출되는 함수의 개수는 log N개 2) 정복(Conquer): 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 다시 분할한다. 3) 결합(Combine): 정렬.. 2022. 1. 12.
재귀(Recursion)와 스택(stack)영역 다른 알고리즘과는 다르게 제목에 재귀와 함께 스택 영역을 적어놓은 이유가 있다. 재귀 함수를 호출하는 것과 메모리 스택 영역의 연관성은 마지막 부분에 정리하겠다. 1.1 재귀(Recursion) * 위키피디아 정의 컴퓨터 과학에 있어서 재귀는 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻하며, 프로그래밍에서는 함수가 자기 자신의 함수를 호출하도록 구현한다. 보통 알고리즘을 구현할 때, 반복문으로 구현한 코드보다 재귀호출로 구현한 코드가 더 직관적이고 이해하기 쉬운 경우가 많다. 재귀는 마치.. 무의식 속의 무의식으로 들어갔다가 결국 현실로 되돌아오는 인셉션과 비슷하다. 용어만으로는 헷갈리니 파이썬 코드로 알아보자. def recursion(): print("난 재귀 함수야") recursion() .. 2022. 1. 9.
버블 정렬(bubble sort) 참고: 누구나 자료 구조와 알고리즘(개정2판) 4장, 모두를 위한 컴퓨터 과학(데이비드말란 교수님) 강의 정렬 알고리즘 시각화 사이트 https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html 4.1. 버블 정렬 이번 4장에서는 현실적인 문제를 푸는 코드를 작성해보고, 빅 오를 사용해 작성한 알고리즘을 평가해보겠다. 정렬 알고리즘은 컴퓨터 과학 분야에서 폭넓게 연구된 주제이며, 이러한 알고리즘은 모두 다음 문제를 해결한다. 정렬되지 않은 배열이 주어졌을 때, 어떻게 오름차순으로 정렬할 수 있을까? 4장과 5장에서는 이런 정렬 알고리즘을 많이 다룰 것이다. 매우 기본적인 정렬 알고리즘인 버블 정렬부터 알아본다. 버블 정렬은 두 인접한 원소의 대소.. 2022. 1. 9.
선택 정렬(selection sort) 참고: 누구나 자료 구조와 알고리즘 2장, 모두를 위한 컴퓨터 과학(하버드 데이비드말란 교수님) 강의 1.1. 선택 정렬 정렬을 위한 알고리즘 중 선택 정렬을 배열 안의 자료 중 가장 작은 수(혹은 가장 큰 수)를 찾아 선택해놓은 다음, 첫 번째 위치(혹은 가장 마지막 위치)의 수와 교환해주는 방식의 정렬이다. 선택 정렬은 버블 정렬처럼 쌍을 이뤄 앞/뒤 순서를 교환하지 않는다. 매번 가장 작은 값을 선택해놓는 것이 목표다. 즉, 반복할 때마다 가장 작은 수를 선택하는 것이다. 버블 정렬은 인접한 두 원소를 비교할 때마다 교환이 발생하지만, 선택 정렬은 교환 횟수를 최소화한다. 1.2. 선택 정렬 구현 1부터 N개의 원소가 있다고 하자. (인덱스 번호로는 0번째부터 N-1번째에 원소가 있는 것) for .. 2022. 1. 8.
빅 오 표기법 참고: 누구나 자료 구조와 알고리즘(개정2판) 3장 3.1. 빅 오 표기법: 원소가 N개일 때 몇 단계가 필요할까? 에 대한 답 1장과 2장에서는 알고리즘의 효율성을 결정하는 주된 요인이 알고리즘 수행에 필요한 단계 수임을 밝혔다. 그러나 어떤 알고리즘은 '7단계의 알고리즘' '120단계의 알고리즘'으로 표시하기엔 장황하므로 알고리즘의 시간 복잡도(효율성)를 일관되고 정량화하여 나타내기 위한 방법으로 빅 오 표기법을 사용하게 되었다. 앞에서 배운 선형 검색을 빅 오 표기법으로 표현해보자. 배열에 원소가 N개가 있을 때, 선형 검색에서 최악의 경우 배열의 원소 수만큼의 단계가 필요했다. 빅 오 표기법으로 '빅 오 N', '차수 N' , '오 N' 이라 표현한다. O(N) O(N)은 알고리즘에 N단계가 필요.. 2021. 12. 28.
선형 검색, 이진 검색 참고: 누구나 자료 구조와 알고리즘 2장, 모두를 위한 컴퓨터 과학(데이비드말란 교수님) 강의 1장에서는 배열이나 집합처럼 매우 유사해 보이는 두 자료 구조라도 효율성이 크게 다를 수 있음을 보았다. 2장에서는 어떤 자료 구조를 이미 결정했더라도 효율성에 영향을 미칠 수 있는 알고리즘에 대해 살펴본다. 알고리즘이란 단순히 어떤 문제를 풀어내기 위한 명령어 집합이다. 새 알고리즘을 분석하기 위해 자료 구조 하나를 살펴보자. 2.1. 정렬된 배열 정렬된 배열(ordered array)은 값이 항상 순서대로 있어야 한다. 일반 배열이 [8, 17, 3, 202] 일 때, 정렬된 배열은 [3, 17, 80, 202]라 할 수 있다. 정렬된 배열의 강력함은 검색 연산에서 드러난다. 전형적인 배열의 특정 값을 찾으.. 2021. 12. 27.
누구나 자료 구조와 알고리즘(개정2판) 1장 1. 자료 구조가 중요한 까닭 자료 구조: 자료를 조직하고 저장하는 방법이다. 자료(데이터)를 어떻게 조직하느냐에 따라 프로그램의 실행 속도는 천차만별로 달라질 수 있다. ex. 책장에 책을 어떻게 진열할 것인가? 연도 순, 알파벳 순, 가로 정렬 등등 자료 구조와 다르게, 알고리즘은 원하는 책을 어떤 방법으로 찾을 것인가? 1.2. 배열 번호(인덱스)와 번호에 대응하는 값들로 이루어진 자료 구조를 나타낸다. 인덱스가 곧 배열의 시작점으로부터 값이 저장되어 있는 상대적인 위치가 된다. 자료 구조에 사용되는 4가지 기본 연산이 있다. 읽기: 자료 구조 내 특정 위치를 찾아보는 것. 배열에서는 특정 인덱스의 값을 찾아보는 것을 뜻한다. 검색: 자료 구조 내 특정 값을 찾는 것. '사과'가 과일 목록에 있는지.. 2021. 12. 27.
컴파일러, 인터프리터 차이 영문으로 쓰여진 프로그래밍 언어를 컴퓨터는 어떻게 이해할까? 컴퓨터는 0과 1의 이진수만 이해할 수 있다. 이진수로 이해한다는 것을 더 정확히 말하면 프로그램의 연산을 실행하고 처리하는 장치인 CPU에 전기가 들어오면, 전압의 강도(전압의 크기가 작으면 0, 크면 1)에 따라 0과 1의 조합에 따라 명령을 수행한다. 그럼 프로그래밍 언어로 작성된 영문 글자를 CPU가 이해할 수 있는 기계어(0과 1의 연속으로 구성된 비트 단위의 저급 언어)로 번역해줄 번역기가 필요하다. 컴파일러와 인터프리터는 둘 다 프로그래밍 언어를 기계어로 변환해주지만 차이점이 있다. 컴파일 1) 좁은 의미: 특정 프로그램 소스 코드를 기계어로 변환하는 것 2) 넓은 의미: 특정 프로그램 소스 코드를 다른 언어(혹은 형태)로 변환하는.. 2021. 12. 22.
CGI 기술의 등장 배경과 WAS로의 발전 초창기 웹(WWW)은 웹 서버에 미리 만든 웹 페이지(정적 페이지)를 가공 없이 단순히 보여주는 것이 목적이었다. 그러나 많은 웹 사용자들은 미리 저장된 정보를 보는 것 뿐만 아니라, 유저의 이름을 웹 페이지에 나타내고 싶거나 서버에서 정보를 가공하여 유저의 요청에 동적으로 콘텐츠를 만들어주고 싶은 다양한 요구사항(동적 페이지)이 생기기 시작했다. 이런 요구사항에 따라 CGI가 등장하게 되었다. CGI를 통해 서버 프로그램이 다른 프로그램을 불러내 동적인 정보를 처리하여 클라이언트에 송신할 수 있다. 정적(static), 동적(dynamic) 이란 용어는 사용자가 페이지를 요청하는 시점에 페이지 내용의 유지 여부에 따라 구분 정적 페이지: 누가, 언제 요구하더라도 항상 같은 내용을 표시하는 웹 페이지 동.. 2021. 12. 21.
아스키코드(ASCII), 유니코드 배경 지식 컴퓨터 내부에는 수많은 트랜지스터가 존재한는데, 트랜지스터는 전기 신호로 작동하는 스위치다. 전기 신호가 들어오면(ON) 컴퓨터는 이것을 1로 인식 전기 신호가 없으면(OFF), 컴퓨터는 이것을 0으로 인식 즉, 컴퓨터는 트랜지스터를 통해 사용자가 입력한 데이터를 0과 1로 처리하여 이해한다. 비트: 0과 1로 정보를 표현하는 최소 단위(정보를 0, 1 두 가지로 밖에 표현 불가능) 바이트(8비트): 정보를 표현하는 기본 단위 아스키코드(ASCII) 컴퓨터와 소통하기 위해서는 우리가 사용하는 문자나 기호를 숫자로 변환(인코딩)해서 알려줘야 하는 필요가 생겼다. 아스키코드는 알파벳과 숫자, 특수문자 등 128개의 문자를 0과 1의 숫자 조합으로 대응시킨 문자 인코딩 방식이다. ex. 소문자 a의.. 2021. 12. 20.