목록iOS 개발/자료구조 및 알고리즘 (9)
어쩌다보니 iOS 개발자
스택 데이터 구조는 개념상 객체의 물리적 스택과 동일합니다. 스택에 항목을 추가하면 스택 맨 위에 배치됩니다. 스택에서 항목을 제거하면 항상 맨 위에 있는 항목이 제거됩니다. LIFO 라고 하죠 Last In First Out 책에서는 아래 4개를 예시로 두었네요. pancakes books paper cash Stack operations 스택은 두 가지 필수 작업만 수행합니다. - push : 스택 맨 위에 요소를 추가합니다. - pop : 스택 맨 위 요소를 제거합니다. 한 쪽에서만 요소를 추가하거나 제거할 수 있습니다. LIFO(후입선출) 데이터 구조입니다. - iOS 기준으로는 Navigation 에서 stack 구조를 사용합니다. - 메모리 할당은 아키텍처 수준에서 스택을 사용합니다. 지역 변..
Swift 표준 라이브러리가 제공하는 기본 데이터구조를 이해해보기 이 장에서는 세 가지 주요 데이터 구조인 Array, Dictionary 및 Set에 중점을 둘 것입니다. 1. Array 배열은 각 요소가 순서를 가지고 있는 데이터 모음 즉 요소 컬렉션을 저장하기 위한 컨테이너라고 합니다. let people = ["Brian", "Stanley", "Ringo"] 이런식으로 배열을 만들 수 있습니다. 배열은 Sequence, Collection 프로토콜을 준수하여 정의 되어 있습니다. 그러므로 시퀀스 프로토콜에 의해 적어도 한번은 iterate 할 수 있고, 콜렉션 프로토콜에 의해 비파괴적??으로 여러 번 탐색할 수 있으며, subscript operator를 사용하여 액세스 할 수 있습니다. 그리..
안녕하세요. 엔디엘입니다. raywenderlich 의 Data Structures & Algorithms in Swift e-book 을 구매 후 스위프트 자료구조, 알고리즘 공부를 시작해보고자 합니다. 추후 복습을 위해 이곳에 기록을 남기고자 합니다.. 제발 끝까지 할 수 있도록.. 인간은 같은 실수를 반복한다.. 하지만 이번에는 아니길... 또르르...ㅠ 책 정보: https://www.raywenderlich.com/books/data-structures-algorithms-in-swift Data Structures & Algorithms in Swift Understanding how data structures and algorithms work in code is crucial for cr..
큐는 FIFO (first-in first-out)이다. 큐의 Operation enqueue : 큐에 요소를 맨뒤에 넣는다. 성공 여부 리턴 dequeue : 큐에서 맨 앞의 요소를 꺼낸다. (큐안에서 요소가 삭제 )요소 리턴 isEmpty : 큐안에 비었는지 체크 peek : 큐 맨앞에 요소를 가져온다. (삭제되진 않는다) 큐는 항상 맨 앞과 맨 뒤의 요소만 고려하면 된다. 중간의 요소에 대해서는 생각하지 않아도 된다. 큐를 만드는 총 4가지 방법을 알아볼 예정입니다. 1. array 사용하기 2. doubly 링크드 리스트 사용하기 3. ring buffer 4. two stacks 1. array 로 사용하기 queue의 프로토콜을 계승하여 array변수값을 선언 후 en큐는 array appen..
var bag: Set = ["Candy", "Juice", "Gummy"] bag.insert("Candy") pritn(bag) // prints ["Candy", "Juice", "Gummy"] 중복된 내용을 insert하면 insert되지 않는다. 별다른..내용이 없네..
var scores: [String: Int] = ["Eric": 9, "Mark": 12, "Wayne": 1] Dictionary 는 순서의 개념이 없고 insert 할 때도 특정 index에 삽입 하는 개념도 없다. Dictionary는 Hashable protocol 를 따르고 있다. 추가할 경우 scores["Andrew"] = 0 이런식으로 추가할 수 있다. Array 와 달리 Dictionarty 는 삽입하는데 시간복잡도는 0(1)이다. 검색도 시간 복잡도는 0(1)이다.
ArrayList: 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능하다. 동적배열 삭제 또는 추가 과정에서 데이터의 이동이 매우 빈번히 일어난다. (하나의 데이터 이동이 다음 데이터에게 영향을 끼친다) 데이터 참조가 쉽다. 인덱스 값 기준으로 데이터를 빠르게 찾을 수 있다. Linked List: 노드로 구성된다. 노드는 데이터를 저장될 주소 데이터와 다른 변수를 가르키는 데이터로 구성된다. 데이터의 추가 삭제를 할때 용이하다. 하지만 데이터를 찾을 때는 헤드나 꼬리부터 순차적으로 검색을 해야하기 때문에 느리다.
시간 복잡도: 속도에 해당하는 알고리즘의 수행시간 분석결과 공간 복잡도: 메모리 사용량에 대한 분석결과 알고리즘의 최악의 경우(worst case)를 수식으로 만든 후 그 수식에서 가장 영향력이 큰 부분을 빅-오라고 한다. 예) T(n)= n^2+2n+1의 빅오는 O(n^2) 로 표시한다 대표적인 빅-오 - O(logn) - O(n) - O(nlogn) - O(n^2) -> 이중 for문 - O(n^3) -> 삼중 for문 O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) 최고 최악