알고리즘 뿌시기 두번째-1 (Array와 LinkedList)

SOUTH DARIA·2022년 2월 21일
0

오늘은 알고리즘 강의 2주차이다.!

오늘은 두가지의 강의가 있는데, Array와 LinkedList와 이진 탐색과 재귀 함수 이다..!

일단 첫번째로
ArrayList와 LinkedList에 대해 정리해보려고 한다.

Array이란?

Array(배열)이란 크기가 정해진 데이터의 공간이다.

Array의 특징

  • 한 번 정해지면 바꿀 수 없다.
  • 원소의 순서는 0부터 시작하며 이를 인덱스라고 부른다.
  • 즉시 접근이 가능하다. (상수 시간 내에 접근이 가능하다)
    O(1)O(1) 만에 접근이 가능하다.
  • 배열은 원소를 중간에 삽입/삭제 하려면 모든 원소를 다 옮겨야함.
    ㄴ최악의 경우 배열의 길이 N만큼 옮겨야 하므로 O(N)O(N)이 걸린다.
    ㄴ원소를 삽입/삭제 할 경우 비효율적인 자료구조이다.

예를 들어,
조카의 생일파티를 하려고 한다.

조카가 옛날에 들었던 기억으로는 친구 두명과 삼총사로 친하다고 해서 접시를 세 개만 샀다.

근데 웬 걸, 생일파티하는 날에 전학온 친구와 친해져 네명이서 사총사를 한다며 집으로 왔다.

상황이 곤란해진다..
위와 같이 배열은 한 번 정해지면 바꿀 수 없다.

LinkedList란?

List란 크기가 정해지지 않은 데이터의 공간이다.

LinkedList의 특징

  • 연결 고리(포인터)로 이어주면 자유자재로 늘어날 수 있다.
  • 특정 원소에 접근히려면 연결 고리를 따라 탐색해야 한다.
    ㄴ최악의 경우, 모든 원소(노드)를 탐색해야 하므로 O(N)O(N)의 시간복잡도를 가진다.
  • 원소를 중간에 삽입/삭제 하기 위해서는 앞 뒤의 포인터만 변경하면 된다.
    ㄴ원소 삽입/삭제를 O(1)O(1)의 시간 복잡도 안에 할 수 있다.

Array VS LinkedList

경우ArrayLinkedList
특정 원소 조회O(1)O(1)O(N)O(N)
중간에 삽입 삭제O(N)O(N)O(1)O(1)
데이터 추가데이터 추가 시 모든 공간이 다 차버렸다면 새로운 메모리 공간을 할당받아야 한다모든 공간이 다 찼어도 맨 뒤의 노드만 동적으로 추가하면 된다
정리데이터에 접근하는 경우가 빈번하다면 Array를 사용하는 것이 좋다삽입과 삭제가 빈번하다면 LinkedList를 사용하는 것이 더 좋다

파이썬의 배열은 list일까, array일까?

profile
고양이와 함께 - 끄적끄적 개발하고 이씁니다 ~!

0개의 댓글