2023. 7. 21. 15:22ㆍ알고리즘 공부
데이터 구조
데이터 구조는 메모리에 저장할 때 데이터의 순서나 위치 관계 등을 정하는 것
데이터들은 메모리 안에 저장
예를 들어 전화번호부가 저장되어있는 메모리가 있다.
한 사람의 전화번호를 찾고싶은데 전화번호는 번호들로 되있어서 못찾으니 이름으로 찾아야겠지만
위에서나 뒤에서부터 차례대로 찾는건 저장이 별로 안되있을때는 모르겠지만 저장이 많아지면 시간이 오래걸린다.
그래서 이름으로 정렬하면서 하면 찾을때는 편하겠지만 다른 이름을 추가할때는
이름들 사이에 넣어서 다음 인덱스들은 다 뒤로 빠지기 때문에 이름을 추가할때는 처리속도가 느려진다.
하지만 이걸 둘다 합쳐서 사용한다면 리스트들을 ㄱ ㄴ ㄷ ㄹ 순으로 다 나눈다음에 여기다 뒤에 추가하는것
이러면 되게 효율적으로 바뀔것이다.
리스트
데이터 구조중 하나로 데이터를 일직선으로 나열한 형태
데이터를 추가와 삭제는 쉽지만 원하는 데이터에 접근하려면 시간이 많이걸림
배열
데이터 구조중 하나로 데이터를 1열로 나열한 것
리스트와 비교를 하면 리스트보다는 데이터를 접근하기 쉽지만 추가나 삭제가 리스트보다 오래 걸림
스택
데이터 구조중 하나로 데이터를 1열로 나열하지만 가장 최근에 추가한 데이터에만 접근 가능
그래서 스택은 배열이랑 리스트처럼 1열로 나열하지만 데이터 추가와 삭제가 단반향으로만 가능하다는
제약이 있음
큐
데이터 구조중 하나로 스택과 비슷하지만 큐는 제일 먼저 추가됐던 데이터에 접근을함
스택처럼 중간에 데이터들을 접근할수 없음 접근할거면 데이터들을 다 디큐하면서 접근해야함
해시테이블
데이터 구조중 하나로 데이터 검색을 효율적으로 하기 위해 사용되는 구조
해시테이블은 해시 함수값을 구하고 그걸 배열의 크기의 나머지로 배열에 들어간후에 이제 나머지가 겹치면 리스트로
연결이 됌 그래서 해시테이블은 배열내에 특정 데이터에 빠르게 접근,유연하게 접근 가능
하지만 해시테이블은 배열의 크기가 너무 작으면 충돌이 많아지고 선형탐색의 빈도가 늘어남
하지만 또 배열의 크기가 너무크면 메모리 낭비가 엄청 많이됌 그래서 적당한 배열의 크기고 지정해야함
힙
그래프의 트리 구조중 하나로 우선순의 큐를 구현할 때 사용
또한 힙을 표현 하는 트리구조에서는 각 정점(데이터 크기)을 노드라고 부름
힙에서는 각 노드에 데이터가 저장
가장 위에서부터 채워지고 같은 층에서는 왼쪽부터 채워짐
우선순위 큐
우선순위 큐는 데이터 구조중 하나로 데이터를 자유롭게 추가가능
반대로 데이터를 추출할때는 가장 작은값을 꺼냄(최솟값)
우선순위 큐는 부모가 제일 데이터 크기수가 작아야해서 부모가 가장 작은 숫자를 가지고있고
만약에 추가를할때 추가한 숫자가 부모숫자보다 작으면 가장 작은숫자가 위에있게 되고 원래 부모였던 노드는 가장 아래 오른쪽으로 위치하게됌
이진 탐색 트리
데이터 구조중 하나로 그래프의 트리 구조를 사용
이진 탐색 트리는 두가지 성질을 나타내는데 모든 노드들의 왼쪽 가지는 현재 노드의 숫자보다 작은숫자이고
오른쪽은 무조건 큰숫자임 그래서 이진 탐색에 추가를 할때 먼저 첫번째 노드를 비교해서 작으면 왼쪽 크면 오른쪽
이렇게 계속 정렬을 하면서 끝에 정렬이됌 만약 노드 중간이 삭제된다 하면은 삭제된 노드 왼쪽가지에 최대값 노드를 찾아서 가져옴