반응형

자료구조, 알고리즘 10

DS08 - 선형리스트의 구현

선형리스트의 구현 방식 선형 리스트는 배열을 사용해 순차 자료구조 방식을 구현한다. 배열은 쌍으로 구성되어 메모리에 연속적으로 할당 되는데, 이때 인덱스는 배열 원소의 순서를 나타낸다. 배열은 순서를 가진 배열 원소들을 메모리에 연속하여 순차적으로 구성하므로, 프로그래밍 언어에서 제공하는 배열을 사용하면 순차 자료구조 방식의 선형 리스트를 쉽게 구현할 수 있다. 1차원 배열을 이용한 구현 수학에서 1차원은 선으로 이루어진 차원 공간을 의미한다. 1차원 배열또한 선형의 형태를 띄고 있다. 모든 원소는 하나의 직선 위에 존재하기 때문에 하나의 인덱스 값을 이용하여 모든 원소에 접근할 수 있다.다음은 4개의 정수를 저장하는 배열과 이를 저장한 메모리를 나타낸 것이다.int array = {216, 209, 2..

DS07 - 순차 자료구조와 선형 리스트의 이해

순차, 연결 자료구조 자료는 구조화 하는 방법에 따라 리스트(List), 스택(Stack), 큐(Queue), 데크(Deque), 트리(Tree), 그래프(Graph) 등으로 나눌 수 있다. 이러한 자료구조 유형은 프로그램으로 구현하는 방식에 따라 순차 자료구조와 연결 자료구조로 나눌 수 있다. 순차 자료구조는 구현할 자료들을 논리적인 순서대로 메모리에 연속하여 저장하는 구현 방식이다. 따라서 순차 자료구조는 논리적인 순서와 물리적인 순서가 항상 일치해야 한다. C 프로그래밍에서 순차 자료구조는 배열을 통해 구현하고, 연결 자료구조의 경우 포인터를 이용하여 구현한다. 구분 순차 자료구조 연결 자료구조 메모리 저장 방식 메모리의 저장 시작 위치부터 빈자리 없이 자료를 순서 대로 연속하여 저장한다. 논리적인..

DS06 - 재귀함수

재귀호출(Recursive Call)의 개념 재귀함수에 대한 설명은 링크에 있다.http://0verc10ck.tistory.com/9 링크를 누르고 이동하면 이 글이 나온다. 새로 열린 글에서 링크를 눌러도 또 다시 이 글이 나올것이다.이처럼 재귀호출(Recursive Call)은 함수가 자기 자신을 호출하여 순환하여 수행되는 것으로 순환 호출 또는 Recursion이라고 한다.함수에서 실행해아 하는 작업의 특성에 따라 재귀호출 방식을 사용하여 함수를 만들면 프로그램의 크기를 줄이고 간단하게 작성할 수 있다. 그렇다면 어떤 경우에 재귀호출이 필요할까? 프로그램을 실행하다가 어떤 작업이 필요하면 그 작업을 담당하고 있는 함수를 호출하여 처리하게한다.재귀호출은 함수 입장에서 보면, 내가 나를 호출 하는 것..

DS05 - 구조체

구조체(Structure) 개념 어떠한 프로그램을 구현할 때 항상 같은 자료형의 자료들만을 다루지는 않는다. 예를 들어 어떤 회사의 직원 명부를 데이터베이스에 저장하려 한다면, 직원의 이름(문자열), 나이(정수), 직급(문자열), 연봉(정수)등 다양한 자료형의 자료들을 묶어서 저장해야 할 필요가 있다. 많은 자료를 묶어 표현하는 방법에는 배열이 있다. 하지만 배열의 경우 모든 자료의 자료형이 같아야 하기 때문에 다양한 자료형의 자료는 하나로 묶을 수 없다. 이러한 문제점을 해결하기 위해서는 구조체(Structure)을 사용하면 된다. 구조체의 선언 구조체는 여러 자료형의 변수들을 그룹으로 묶어서 하나의 자료형을 선언하여 사용한다. 구조체는 이름, 자료형, 데이터 항목으로 구성된다. 구조체형 이름은 구조체..

DS04 - 포인터

포인터(Pointer) 컴퓨터에서 사용하는 모든 변수는 메모리의 특정위치에 저장되는데 그 위치를 나타내는 메모리 주소를 포인터라고 한다.포인터 변수(Pointer Variable)은 어떠한 변수의 메모리 주소(Memory Adress)를 저장하고 있는 변수이다.그렇기 때문에 포인터 변수에 저장되는 값은 "0019FB26"과 같은 메모리 주소의 형태이다.포인터 변수 P가 어떤 변수 A의 주소를 저장하고 있다는것은, 포인터 변수 P가 메모리상의 변수 A의 위치 즉, 주소값을 저장하고 있다는 뜻이다.포인터 변수는 변수가 메모리를 포인트(가리키다)하고 있기 때문에 포인터 변수라는 이름을 가지게 되었다. 간단하게 "포인터" 라고 부르기도 한다. 다음 그림은 포인터 변수의 형태를 나타낸것이다. 포인터 변수는 102..

DS03 - 배열(Array)

배열(Array)의 개념 배열(Array)은 자료형이 같은 자료를 나열하여 메모리에 연속으로 저장하여 만든 자료의 그룹이다.예를 들어 요일을 나타내는 월 ~ 일요일을 각각 하나의 변수로 선언하면 변수를 7번이나 선언해야 한다.하지만, 요일을 나타내는 배열을 만들어 사용하면 배열만을 선언하기 때문에 변수선언 횟수가 줄어든다. 배열은 각 요소들을 구별하기 위해 번호를 사용하는데 이 번호를 인덱스(Index)라고 한다.C/C++에서 인덱스는 항상 0부터 시작한다. 특정 배열 요소를 사용할 경우 "배열이름[인덱스]"의 형태를 이용하여 변수처럼 사용할 수 있다. 모든 자료형은 배열로 구성할 수 있고, 구성형태에 따라 1차원 배열 뿐만 아니라 2차 3차 4차 등의 다차원 배열도 구성할 수 있다. 1차원 배열(1-D..

AL02 - 알고리즘의 성능 분석

성능 분석이란? 어떠한 문제를 해결할 방법은 많지만 문제를 해결하는데 너무 오랜 시간이 걸려서는안된다.따라서 우리는 문제를 가장 효율적이고 빠르게 해결할 수 있는 방법을 찾아야 하는데 이 과정에서 여러 알고리즘의 성능을 분석하고 비교하게 된다. 그렇다면 알고리즘의 성능은 어떻게 분석할까?알고리즘의 성능을 분석하는 판단 기준에는 정확성, 명확성, 수행량, 메모리 사용량, 최적성 등이 있다.정확성 : 올바른 자료가 입력되었을때 유한한 시간 내에 올바른 결과를 도출하는가?명확성 : 알고리즘이 이해하기 쉽고 명확하게 작성되었는가?(명확한 알고리즘은 이해와 변경이 쉽다.)수행량 : 알고리즘의 주요 연산이 얼마나 반복되는가?메모리 사용량 : 알고리즘이 문제를 해결하기 위해 얼마나 많은 메모리 공간을 필요로 하는가?..

AL01 - 알고리즘의 이해

알고리즘(Algorithm)의 이해 알고리즘(Algorithm)은 문제를 해결하는 절차나 방법을 뜻한다.즉, 어떠한 문제를 해결하는 방법이나 절차는 모두 알고리즘이라고 할 수 있는 것이다.간단하게 예를 들어보자면 요리의 레시피, 프로그램의 설치 과정설명서, 가구 조립 설명서 등도 전부 알고리즘이라고 말할 수 있다. 알고리즘은 이하의 조건을 만족해야한다.입력(Input) - 알고리즘은 0 또는 그 이상의 외부에서 제공된 자료가 존재한다.출력(Output) - 알고리즘은 최소 1개 이상의 결과를 가진다.명확성(Definiteness) - 알고리즘의 각 단계는 명확하여 애매함이 없어야 한다.유한성(Finiteness) - 알고리즘은 단계들을 유한한 횟수로 거친 후 문제를 해결하고 종료해야 한다. 알고리즘의 한..

DS02 - 다양한 자료의 표현

컴퓨터의 자료 표현법 컴퓨터는 자료를 표현하기 위해 1과0(ON & OFF, True & False)으로 이루어진 2진코드(Binary Code)를 이용하여 자료를 표현하고 저장한다. 즉, 여러분의 컴퓨터에 있는 모든 형태의 자료(숫자, 문자, 그림, 소리, 영상 등)는 컴퓨터에 2진코드로 저장되어 있다는 말이다. 위 그림은 컴퓨터에서 자주 사용되는 자료들을 정리한 자료이다. 컴퓨터에서 사용하는 자료로는 10진수, 2진수 등의 숫자를 다루는 수치자료, 영어, 한글, 특수기호등 다양한 문자를 다루는 문자자료, 참과 거짓으로 논리적인 연산을 하는 논리자료, 메모리의 위치를 이용하는 포인터자료, 여러 문자들을 이어 붙여 문장을 이루는 문자열 자료 등이 있다. 그렇다면 컴퓨터의 모든 자료를 저장하는 2진수는 어..

DS01 - 자료구조의 정의와 분류

자료구조란? 자료구조(Data struct)란 컴퓨터에서 사용할 자료를 더 효율적으로 저장하고 처리할 수 있도록 자료의 특성과 사용용도에 따라 분류하고 정리하여 구조화 한 것을 뜻한다. 자료구조를 통해 자료를 효율적으로 정리한다면 알고리즘을 구현하는데 큰 도움이 되고 구현하는 알고리즘의 시간복잡도(Time Complexity)와 공간복잡도(Space Complexity)를 최소화하는데 도움이 된다. 각각의 알고리즘이나 프로그램에는 효율적으로 적용되는 자료의 형태가 있다. 프로그램을 작성하기 전에 어떠한 자료의 형태를 먼저 정하는 것은 좋은 프로그램을 구현하는데 많은 도움이 된다. 효율적인 자료의 효과는 프로그램이나 프로젝트의 규모가 커질수록 크게 나타나기 때문에 이러한 자료들의 특성을 잘 이해하고 적절히..

반응형