April 30, 2016
4/30(토) 알고리즘 스터디1
A) 일련의 자료를 집합형태로 쌓을 수 있는 구조를 말한다고 생각한다. 실생활에서 장에 그릇을 놓는 다면 찬장, 책을 모아 두면 책장이 되는 것 처럼 ‘틀’이라고 생각 할 수 있다. 그런 의미로 볼 수 있다고 생각한다. 컴퓨터로 치면 데이터 집합인 배열, 리스트 등등도 그러한 경우 결국 어떤 용도로 쓸 것인지가 중요하다. 결국 자료구조의 용도는 무엇을 담을지에 대한 초점이다.
팀원) 사용하기 편하게 & 빠르게 만드는게 자료구조. - 효율성 위주 ( 목적성 위주로 생각해도 될 것 같다.)
A) 나는 프로그래머의 편의성인 것 같다. 우선 컴퓨터 프로그래밍에서 자료구조가 생긴 이유는 각 자료형의 진화 역사를 보면 알 수 있다고 생각한다. 초기에는 int, char, float,double등 primitive type만 존재했으나, 동등한(equivalent) type을 여러 개 생성 하는 방법이 필요해 진 것이다. 그게 바로 Array이고, 그 이후에 다른 Type도 같이 사용하고 싶어서 나온 개념은 Struct이다. 이는 다양한 Type을 한데 모아 사용하고자 함이다. 그러다가 순간 순간에만 메모리 효율성을 위해 사용하고자 해서 나온 구조가 Union이고, Method(행위)까지 추가하게 된 개념이 class라고 생각한다. 결국 프로그래머의 편의성에 대한 점도 일부 맞지 않을까 ?
팀원 ) 자료들에 사용하는데 초점을 맞춰서 생각!
A) 자료구조의 선택 기준은 상황에 따른 목적이 중요할 것으로 생각 된다. 어떤 자료가 특정 집합으로 구성되어 있을 때 이것을 원하는 바(목적)의 형태로 가공하기 쉽고, 자료 처리를 쉽게 할 수 있는 구조가 상황마다 다르기 때문이다.
팀원 )
A)알고리즘은 일련의 처리 절차이다. 단, 여기서 중요한점은 간략함이 될 것 같다. 부수적인 것들이 많아지면 알고리즘이라 부르기 어렵고 Logic이라 부르는 것이 더 알맞는 표현일 것 같다. 부수적인 것이 없는 처리 절차를 표현한 것이 알고리즘이며, 알고리즘은 시간 복잡도, 공간 복잡도를 따져야 할 만큼 중요한 처리 절차의 목적을 포함하고 있다.
즉, 알고리즘과 자료구조의 차이점은 자료구조는 ‘데이터를 저장하는 틀’이고, 알고리즘은 처리 절차이다. 알고리즘에서 자료구조를 사용한다고 표현 할 수 있겠다.
A)상황마다 매번 같은 알고리즘을 쓸 수 없을 것이 첫 번째 이유라 생각한다. 정렬 기법도 다양한 이유가 목적이 다르기때문에 달라진다. 흔하게 사용하는 Quick Sort라던지, Insertion Sort등 속도가 다르고, 정렬시 사용하는 공간(Space)이 다르다. 즉, 정보를 처리하는 목적에 따라 시간에 High-Cost를 투자 할 것인지? 공간에 High-Cost를 투자 할 것인지가 모든 개발 상황마다 다르게 적용이 될 수 있으므로, 알고리즘은 다양해진다. 상황이 다양하고, 목적도 다양하기에 다양한 알고리즘을 만들고 사용 한다.
구조적 데이터 타입(Structured data type) : 여러 데이터를 묶어서 하나의 단위로 처리하는 데이터 타입 배열 - 같은 자료형의 모임(homogeneous)이며, 저장하는 자료형태는 Equivalent Type이다.
또한, 일반적인 언어는 첨자 하한이 0인데 반면, Ada, Perl의 경우 음수도 가능하다.
정해진 사이즈만큼 연속적인 공간에 할당 된다.
1차원 배열의 경우
| A[0] | A[1] | A[2] |
|---|---|---|
| 204 | 208 | 212 |
1차원 배열 주소 공식
A[i] = base * (i - a) * size
base : 시작 주소 (A[0]가 시작주소)
a : 첫번 째 원소의 첨자 (음수가 아니면 0)
Size : 각 원소의 크기
실제 메모리에 저장되는 위치가 행 중심으로 저장 된다. A[1][1] , A[1][2] , A[1][3] … 식으로 저장 된다. 대부분의 언어에서 사용.
실제 메모리에 저장되는 위치가 열 중심으로 저장 된다. A[1][1] , A[2][1] , A[3][1] … 식으로 저장 된다. 주로 Fortran 계열에서 사용.
선언
int arr[100]; - C
int[] arr = new int[100]; - Java
검색
삭제
삽입
int main()
{
int arr[5] = {1,2,3,4,5};
printf("%d %d\n", arr[5] , 5[arr]);
}위 코드에서 이상한 점을 발견 하셨나요? 왜 그렇게 되는지는 한 번 공부해보시기 바랍니다.
컴퓨터의 메모리 영역 관련 자료 : 메모리 영역 참고
쉽게 생각하면 정보의 나열이라고 생각 할 수 있는데, 순서가 있다.
특징
비교
ArrayList의 경우
* 삽입은 빠르다. 단, 삭제연산에는 많은 비용이 발생한다. * 추가적으로 확장에 불리한 구조를 가진다. * 검색도 빠르다.
스택의 연산
스택의 실제 사용 예
큐의 연산
큐의 사용 예
큐의 구현과 특징, 비교
큐의 종류와 존재 이유 특징, 차이점 비교