전체 글 29

알고리즘은 이상, 프로그래밍은 현실

알고리즘은 추상적이고 이상적인 절차를 기술한 것으로, 구현에 필요한 세부 사항과 현실적인 고려 사항을 무시한다. 알고리즘은 정확하고 명료한 레시피이다. 의미가 완전히 알려져 있고 구체적으로 명시된 기본 연산으로 표현된다. 이러한 기본 연산을 사용하여 각 단계를 상세히 설명하고 모든 가능한 상황을 다룬다. 그리고 알고리즘은 결국 멈춰야 한다. 이와 대조적으로 프로그램은 추상적인 것과는 거리가 멀다. 프로그램은 실제 컴퓨터가 과제를 완료하기 위해 수행해야 하는 모든 단계를 구체적으로 서술한다. 알고리즘과 프로그램 간의 차이는 청사진과 건물 간의 차이와 비슷하다. 한쪽은 이상적인 것이고, 다른 쪽은 실재하는 것이다. 프로그램을 하나 이상의 알고리즘이 컴퓨터가 직접 처리할 수 있는 형태로 표현된 것이라고도 생각..

IT 지식 2022.08.20

10개 도시를 최단 거리로 여행하는 법

알고리즘 '복잡도' 또는 실행 시간의 스펙트럼을 따라가며 몇 가지 알고리즘을 살펴봤다. 먼저 효율이 높은 알고리즘으로는 logN의 복잡도를 갖는 이진 검색 등이 있는데, 데이터의 양이 증가함에 따라 일의 양이 천천히 늘어난다. 가장 일반적인 경우는 선형, 즉 단순히 N의 복잡도를 가지며, 일의 양이 데이터 양에 정비례한다. 퀵 정렬 같은 알고리즘은 NlogN의 복잡도를 갖는데 N보다는 효율이 낮지만(일이 양이 더 빨리 증가하지만), 로그 인자가 상당히 느리게 증가하므로 큰 N 값에도 대단히 효과적으로 활용할 수 있다. 다음으로 N², 즉 2차는 일의 양이 너무 빨리 늘어나서 실행하기 고역스러운 수준이거나 아예 활용 불가능한 수준 그 사이에 있다. 이 밖에 다른 복잡도를 갖는 알고리즘도 많고, 몇 가지는 ..

IT 지식 2022.08.18

선택정렬 vs 퀵 정렬

어떻게 하면 이름을 알파벳순으로 배치할 수 있을까? 그런 예비 단계 없이는 이진 검색을 사용할 수 없다. 여기에서 또 다른 알고리즘인 정렬이 등장한다 정렬은 항목을 순서대로 배열해서 검색이 빨리 실행될 수 있도록 해준다. 이진 검색으로 효율적으로 찾을 수 있도록 사전에 이름을 알파벳순으로 정렬하고 싶다고 가정해 보자. 먼저 살펴볼 알고리즘은 선택 정렬이다 이렇게 불리는 까닭은 아직 정렬되지 않은 항목 중에서 다음 이름을 계속 선택하기 때문이다. 이는 앞서 보았던 방 안에서 가장 키 큰 사람을 찾는 기법에 바탕을 두고 있다. 맨 처음 단어와 다음 이름을 비교해서 알파벳이 앞에 오는 것을 첫 번째 이름을 하고, 비교해야 할 대상들을 차례대로 비교해가면서 알파벳순으로 정렬한다 그 다음 2번째로 오는 알파벳을 ..

IT 지식 2022.08.18

이진 검색

선형 시간 알고리즘보다 더 나은 방법은 없을까? 이름과 전화번호가 적힌 리스트나 명함 다발이 많이 있다고 가정해 보자. 이름이 순서 없이 섞여 있는 상태에서 '김철수'의 전화번호를 찾으려 한다면, 그 이름을 찾을 때까지 리스트를 전부 확인해야 할 것이고, 아예 그 이름을 찾지 못할 수도 있다. 하지만 이름이 한글순으로 되어 있다면 더 쉽게 찾을 수 있다. 종이로 된 옛날 전화번호부에서 이름을 찾는 방법을 생각해 보자. 보통은 전화번호부 중간쯤부터 보기 시작한다. 만일 찾는 이름이 중간 페이지에 있는 이름보다 알파벳순으로 앞에 있으면 책의 뒤쪽 절반은 완전히 무시하고 앞쪽 절반의 중간(전체의 1/4 지점)을 펼쳐 본다. 그렇지 않으면 책의 앞쪽 절반은 무시하고 뒤쪽 절반의 중간(전체의 3/4)을 확인한다...

IT 지식 2022.08.10

선형 알고리즘

반에서 가장 키 큰 사람이 누구인지 알고 싶다고 해보자. 그냥 둘러봐도 어림짐작할 수 있겠지만, 알고리즘은 바보 같은 컴퓨터도 이해할 수 있을 정도로 실행 단계를 명확하고 상세하게 설명해야 한다. 기본적인 접근 방식은 한 명 한 명 차례로 키가 몇인지 묻고, 지금까지 확인한 사람 중에 가장 키 큰 사람이 누군지 계속 체크하는 것이다. 사람들에게 돌아가며 다음과 같이 물어볼 수 있다. '철수야, 키가 몇이니?' 만일 철수가 처음으로 키를 물어본 것이라면 지금까지는 철수가 가장 키 큰 사람이다. '영희야 키가 몇이니?' 철수 다음으로 영희에게 키를 물어봤는데 영희가 더 크다면 이제 영희가 가장 키 큰 사람이고 ,그렇지 않다면 철수가 순위를 유지한다. 어떻든 세 번째 사람에게도 이어서 질문하고, 이런 식으로 ..

IT 지식 2022.08.10

소프트웨어와 알고리즘과 초콜릿 케이크 레시피

소프트웨어로 들어가기 전에 알아 둬야 할 좋은 소식과 나쁜 소식이 있다. 좋은 소식은 컴퓨터가 어떤 계산이라도 수행할 수 있는 범용 기계라는 점이다. 활용할 수 있는 명령어의 종류는 몇 가지뿐이지만, 컴퓨터는 명령어를 매우 빨리 처리할 수 있고 자신의 동작을 대부분 제어할 수 있다. 나쁜 소식은 컴퓨터는 무엇을 해야 할지 누군가가 극도로 상세하게 알려 주지 않는다면 스스로 아무것도 하지 않는다는 점이다. 컴퓨터는 궁극적인 마법사의 제자라고 할 수 있다. 지칠 줄 모르고 실수없이 명령을 따르지만, 해야 할 일을 설명해 주려면 공들여 정확을 기해야 한다. 소프트웨어는 컴퓨터가 뭔가 유용한 일을 하게 해주는 일련의 명령어를 의미하는 일반적인 용어다 소프트웨어는 하드웨어와는 대조적으로 형체가 없고 손에 잡히지 ..

IT 지식 2022.08.09

캐시가 뭔가요?

캐싱은 컴퓨팅 이외에도 여러 분야에 폭넓게 저용 가능한 아이디어다. 프로세서에는 캐시는 용량이 작고 속도가 빠른 메모리로, 용량이 더 크지만 훨씬 느린 주 기억 장치에 매번 접근하는 것을 피하고자 최근에 사용된 정보를 저장하는 데 사용된다. 프로세서는 일반적으로 여러 그룹의 데이터와 명령어에 짧은 간격으로 잇달아 여러 번 접근한다. 일반적인 프로세서에는 캐시가 2-3개 있는데, 흔히 L1, L2, L3 레벨이라고 부르고 뒤로 갈수록 용량은 크지만 속도는 더 느리다. 가장 큰 캐시는 데이터를 몇 MB 정도 담을 수 있다. 캐싱이 효과적인 이유는 최근에 사용된 정보가 곧 다시 사용될 가능성이 크기 때문이다. 캐시에 정보를 포함하고 있다는 사실은 메모리 작업을 기다리는 데 시간을 덜 쓴다는 것을 뜻한다. 캐싱..

IT 지식 2022.08.06

프로세서는 무조건 빠른 게 좋을까?

프로세서는 인출, 해석, 실행 사이클을 계속 반복 수행한다. 우선 메모리에서 다음에 처리할 명령어를 인출한다. 보통은 다음 메모리 위치에 저장된 명령어지만 GOTO나 IFZERO가 명시하는 위치에 있는 명령어일 수도 있다. 이어서 가져온 명령어를 해석한다. 즉, 명령어가 무슨 일을 하는지 파악하고 명령어를 수행하는 데 필요한 모든 준비를 마치는 것을 의미한다. 다음으로는 명령어를 실행한다. 명령어 실행은 메모리에서 정보를 가져오고, 산술 연산이나 논리 연산을 수행하며, 그 결과를 저장하는 일련의 작업을 명령어에 따라 적절하게 조합함으로써 이루어진다. 그러고 나서 인출 단계로 되돌아간다. 실제 프로세서의 인출, 해석, 실행 사이클에는 전체 과정이 빨리 돌아가게 하는 정교한 메커니즘이 사용되지만, 이 사이클..

IT 지식 2022.08.06

HDD와 SSD의 차이

보조 기억 장치 주 기억장치는 정보 저장 용량이 한정적인 데다 전원이 꺼지면 내용이 사라져 버린다 보조 기억 장치는 전원이 꺼져 있을 때도 정보를 유지한다. 보조 기억 장치에는 크게 두 종류가 있다. 첫 번째는 자기 디스크로, 오래된 기술이며 보통 하드 디스크 또는 하드 드라이브라고 부른다. 비교적 최근에 나온 형태는 SSD라고 한다. 두 종류의 드라이브 모두 메모리보다 많은 정보를 저장하며, 휘발성을 띠지 않아서 드라이브에 저장된 정보는 전력 공급이 없더라도 유지된다. 데이터, 명령어, 다른 모든 정보는 보조 기억 장치에 장기간 저장되고, 주 기억 장치로는 일시적으로만 옮겨진다. 자기 디스크는 회전하는 금속 표면에 있는 자성 물질의 미세한 영역이 자성을 띠는 방향을 설정하여 정보를 저장한다. 데이터는 ..

IT 지식 2022.08.04

프로세서 속도와 심장 박동수

일반적인 컴퓨터를 단순화한 추상적인 그림, 즉 논리적 또는 기능적 아키텍처는 프로세서, 주 기억장치, 보조 기억장치, 다른 다양한 구성 요소가 있으며 그 중간에 정보를 전달하는 버스라는 여러 개의 전선이 있어 서로 연결된다 컴퓨터 대신 휴대전화나 태블릿 PC라면 마우스, 키보드, 디스플레이가 화면이라는 하나의 구성 요소로 합쳐지는 점과 여러분의 물리적 위치를 알기 위한 나침반, 가속도계, GPS 수신기 같은 숨은 구성 요소가 추가된다는 점 말고는 비슷하다 이처럼 프로세서, 명령어와 데이터를 담는 메모리와 저장 장치, 입력과 출력 장치가 있는 기본 구조는 1940년대 이래 이어지는 표준이다 이러한 구조를 흔히 폰 노이만 아키텍처라고 하는데 1946년에 발표된 논문에서 이 구조를 기술한 존 폰 노이만의 이름..

IT 지식 2022.08.04