스위프트 데이터 구조와 알고리즘 (프로그래밍의 튼튼한 기초)

스위프트 데이터 구조와 알고리즘 (프로그래밍의 튼튼한 기초)

$30.74
Description
데이터 구조와 알고리즘은 문제를 해결하기 위한 패턴이라 할 수 있으며, 이를 잘 활용하면 어려운 문제를 간단하면서도 세련되게 해결할 수 있다. 반면, 데이터 구조에 대한 명확한 이해가 없다면 현대 프로그래밍 언어의 특징이라 할 수 있는 다양한 데이터 타입의 장단점을 파악하기 어려우며, 어떤 상황에서 어떤 데이터 구조를 사용해야 할지 판단할 수 없고, 결국 프로그램의 성능 문제로 남게 된다.

이 책은 스위프트 표준 라이브러리에서 제공하는 코어 데이터의 구조와 알고리즘, 큐, 스택, 리스트, 해시 테이블 등 보편적으로 사용되는 데이터 구조와 알고리즘을 소개한다. 또한 다양한 정렬 알고리즘의 개요를 소개하고 각 알고리즘 성능의 장단점과 데이터 입력 크기에 따른 성능 차이를 비교 분석한다. 스위프트 언어를 통해 구현할 수 있는 다양한 트리 데이터 구조와 알고리즘, 고급 검색 기법을 설명하고, 알고리즘의 성능과 효율성을 한눈에 파악할 수 있는 그래프 구현 방법을 소개한다.

이 책의 목적은 데이터 구조와 알고리즘을 통해 모두들 해결이 어렵다고 말하는 문제에서 패턴 또는 실마리를 찾고, 이를 바탕으로 일상적인 개발 업무에서 즉각적으로 활용할 수 있는 다양한 해법 또는 응용 프로그램을 떠올리게 하는 것이다.
저자

에릭아자르

저자에릭아자르(ErikAzar)는지난20년간스타트업부터포춘500대기업에이르는다양한기업을위해네트워크엔지니어링,시스템관리,보안,기업비즈니스서비스분야에서확장성을겸비한고성능데스크톱,웹과모바일애플리케이션설계및개발업무를담당해온컴퓨터과학자다.애플이아이폰을공개했던2007년,처음으로WWDC에참가한이후다양한macOS와iOS애플리케이션을개발해왔다.
플로리다주잭슨빌에있는Availity,LLC의개발자이자아키텍트로서,헬스케어산업을위한각종소프트웨어솔루션을개발하고있으며,팩트출판사의기술감수자로서『RESTful자바웹서비스보안』을리뷰하다가자신의책을쓰고싶다는염원을갖게됐고,결국첫번째책을내게됐다.
개발업무에빠져있지않을때는아내레베카,세아이들과즐거운시간을보내며,때로는모터사이클을타고플로리다해안을달리기도한다

목차

1장.플레이그라운드살펴보기

__데이터구조의중요성
____데이터구조+알고리즘=프로그램
____상호작용성높은플레이그라운드
____스위프트REPL
__기본적인데이터구조
____인접데이터구조
________배열
________배열선언
________배열요소가져오기
________배열요소추가
________배열요소삭제
____연결데이터구조
________단일연결리스트
__데이터구조의종류와장단점
____알고리즘개요
__스위프트에서의데이터타입
____밸류타입과레퍼런스타입
____기명타입과복합타입
____타입알리아스
____스위프트표준라이브러리의컬렉션타입
__점근적분석
____데이터크기분석방법-성장의순서
__정리

2장.스위프트기본데이터구조의활용

__스위프트표준라이브러리의활용
____애플이구조체를사용하는이유
____스위프트에서배열선언
________배열초기화
________배열에요소추가및업데이트
________배열에서요소가져오기및삭제
____딕셔너리가져오기및초기화하기
________딕셔너리초기화하기
________키/값쌍추가,변경,삭제
________딕셔너리에서값가져오기
____세트선언
________세트초기화
________세트요소변경및가져오기
________세트연산자
____튜플의특징
________무기명튜플
________기명튜플
__서브스크립팅구현
____서브스크립트문법
____서브스크립트옵션
__수정가능속성과수정불가속성의이해
____컬렉션의수정가능속성
__스위프트와오브젝티브C의상호관련성
____초기화방식
____스위프트타입의호환성
____컬렉션클래스브릿징
________NSArray를Array로브릿징
________NSSet을set로브릿징
________NSDictionary를dictionary로브릿징하기
__스위프트프로토콜지향프로그래밍
____명령전달을위한디스패치기법
____프로토콜작성문법
____타입으로서의프로토콜
____프로토콜익스텐션
____컬렉션에서활용하기위한프로토콜의검증
________Array리터럴문법
________열거형배열만들기
__정리

3장.스위프트고급데이터구조의활용

__반복기,시퀀스,컬렉션
____반복기
________시퀀스
____컬렉션
__스택
____애플리케이션개요
____구현방법
____프로토콜
__큐
____애플리케이션개요
____구현방법
____프로토콜
__순환버퍼
____애플리케이션개요
____구현방법
____프로토콜
__우선순위큐
____애플리케이션개요
____구현방법
____프로토콜
__스택리스트
____애플리케이션개요
____구현방법
____프로토콜
__정리

4장.정렬알고리즘

__삽입정렬알고리즘
____알고리즘개요
____삽입정렬알고리즘분석
____삽입정렬알고리즘활용사례
____최적화
__병합정렬알고리즘
____배열기반병합정렬알고리즘
____병합정렬알고리즘분석
____연결목록기반병합정렬알고리즘분석
____알고리즘성능비교
__신속정렬알고리즘
____로무토의신속정렬알고리즘
____로무토의파티션스킴분석
____호어의신속정렬알고리즘
____호어의파티션스킴분석
________피봇선택방식
____신속정렬알고리즘을위한개선된피봇선택방식
____최적화
__정리

5장.나무를통해숲을보기

__트리:정의와주요속성
__다양한트리의종류와개요
____이진트리
____이진검색트리
____B트리
____스플레이트리
____레드블랙트리
__이진트리
____타입과종류
____코드
__이진검색트리
____노드삽입
____트리워크(순회방식)
________인오더트리워크
________프리오더트리워크
________포스트오더트리워크
____검색
____삭제
__B트리
__스플레이트리
____스플레이작업
________지그회전
________지그지그또는재그재그회전
________지그재그회전
__정리

6장.고급검색메소드

__레드블랙트리
____레드블랙트리노드의구현
____회전
________우측회전
________좌측회전
____삽입
__AVL트리
____AVL트리노드의구현
____AVL트리회전
________좌측단순회전
________단순우측회전
________우-좌이중회전
________좌-우이중회전
__검색
____삽입
__Trie트리
__Radix트리
__다양한서브스트링검색알고리즘
____서브스트링검색알고리즘사례
________나이브(브루트포스)알고리즘
________Rabin-Karp알고리즘
__정리

7장.그래프알고리즘

__그래프이론
____보편적으로활용되는그래프의유형
________무방향성그래프
________방향성그래프
________가중치그래프
____그래프의표현방식
________객체지향접근법:구조체와클래스활용
________이웃목록
________이웃매트릭스
________근접매트릭스
__데이터구조
____꼭지점
____모서리
____이웃목록
__깊이우선검색
__너비우선검색
__스패닝트리
____미니멈스패닝트리
__Prim알고리즘
__최단경로
__다이크스트라알고리즘
____SwiftGraph
__정리

8장.알고리즘의성능과효율성

__알고리즘의효율성
____최상,최악,그리고평균의경우
__효율성측정과Big-O표기법
____점근적분석
________복잡성계산방식
__일반적인함수의복잡성순서
____O(1)
____O(log(n))
____O(n)
____O(nlog(n))
____O(n^2)
____O(2^n)
________Big-O그래프비교
__런타임복잡성의평가
__정리

9장.내게꼭맞는알고리즘선택하기

__URL단축기
____긴URL문제
____URL단축기구현전략
____스위프트로구현하는URL단축기
________구현기법1:올바른튜플찾기
________구현기법2:인덱스값으로올바른배열위치에바로접근하기
__대규모데이터의검색
____대규모블랙리스트문제
____대규모블랙리스트검색문제의해법
____스위프트로구현하는대규모블랙리스트검색알고리즘
________구현기법1:기본적인대규모블랙리스트검색
________구현기법2:블룸필터기법
__정리

출판사 서평

★이책에서다루는내용★

■스위프트의기본적인데이터구조에대한개념정리
■스위프트표준라이브러리컬렉션과오브젝티브C컬렉션의브릿징기법과프로토콜지향프로그래밍
■스위프트반복기와시퀀스의개념과고급데이터구조에서의활용방법
■다양한데이터정렬알고리즘의구현및장단점비교
■이진트리,이진검색트리,스플레이트리구현및B-트리등고급트리의작동원리분석
■레드-블랙트리,AVL,트라이트리등을활용한고급검색메소드구현
■깊이우선검색,너비우선검색,미니멈스패닝트리,최단경로등의그래프알고리즘구현

★이책의대상독자★

스위프트언어를이용해데이터구조와알고리즘을구현하는방법을익히고자하는개발자를위한책이다.컴퓨터과학을전공한개발자는물론,스위프트에대한실무경험없이스위프트에대해공부하고있는개발자도큰어려움없이최신버전의스위프트언어로고급데이터구조와알고리즘구현방법을익힐수있도록구성했다.
이책에실린대부분의예제코드는모바일환경은물론,서버환경에서도문제없이작동하도록만들어졌다.독자여러분이객체지향프로그래밍에대한사전지식과경험이있다면전반적인내용을좀더쉽게이해할수있겠지만,객체지향프로그래밍을잘모르는독자라하더라도가장기본이되는내용부터설명하므로큰어려움없이기본개념을익히고예제코드를실행해볼수있으리라생각한다.

★이책의구성★

1장,‘플레이그라운드살펴보기’에서는데이터구조와알고리즘,스위프트REPL에대한개요를소개하고,커맨드라인환경에서스위프트명령어를입력하고실행하는방법에대해설명한다.
2장,‘스위프트기본데이터구조의활용’에서는클래스와구조체,배열,딕셔너리,세트컬렉션타입구현을위한상세한방법을소개하고,스위프트에서오브젝티브C와C시스템라이브러리를활용하는방법,그리고프로토콜지향프로그래밍기법에대해설명한다.
3장,‘스위프트고급데이터구조의활용’에서는스위프트프로토콜에의부합방법,스택과큐구현방법,애플리케이션의개발요구사항에따른올바른타입의선택및구현방법에대해설명한다.
4장,‘정렬알고리즘알고리즘의개요와정렬’에서는알고리즘에대해소개하고,배열데이터구조를이용해서정렬알고리즘을구현하는방법에대해알아본다.또한,비교정렬기법등새로운알고리즘을소개하고,단순정렬기법과분리-정복전략의차이에대해서도설명한다.
5장,‘나무를통해숲을보기’에서는트리데이터구조의정의와프로퍼티에대해소개하고,이진트리,이진검색트리,B-트리,그리고스플레이트리등,다양한트리의구현방법에대해상세히알아본다.
6장,‘고급검색메소드’에서는고급트리구조인레드블랙트리,AVL트리,Trie트리(Radix트리)에대해소개하고,서브스트링검색알고리즘구현방법에대해서도알아본다.
7장,‘그래프알고리즘’에서는그래프이론과그래프를위한데이터구조,깊이우선검색,너비우선검색,스패닝트리,최단경로,SwiftGraph에대해알아본다.
8장,‘알고리즘의성능과효율성’에서는알고리즘의효율성의개념을소개하고여러분이만든알고리즘의효율성을측정하는방법과Big-O표기법,Big-O함수의순서,실행시간복잡성의개념에대해설명한다.
9장,‘내게꼭맞는알고리즘선택하기’에서는현실적인복잡한문제를해결하기위해데이터구조와알고리즘을설계하는방법과이를스위프트코드로구현하는방법에대해소개하고,실제상황에서우리가만든알고리즘이정상적으로작동할때Big-O표기법으로복잡성을측정하는방법에대해알아본다.마지막으로병목구간의측정및감지,성능개선을위한코드수정기법에대해서도알아본다.