누구나 자료 구조와 알고리즘

상식으로 이해하는 자료 구조와 알고리즘!
$39.85
SKU
9791165217815
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Fri 12/6 - Thu 12/12 (주문일로부 10-14 영업일)

Express Shipping estimated by Tue 12/3 - Thu 12/5 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2021/11/30
Pages/Weight/Size 183*235*21mm
ISBN 9791165217815
Categories IT 모바일 > 컴퓨터 공학
Description
사칙 연산으로 복잡한 알고리즘을 쉽게 이해해보자
수학 용어와 전문 용어가 아니어도 이해한다


이 분야의 책은 대부분 컴퓨터 공학 전공자를 대상으로 쓰였거나 고등학교 수학을 잘 안다고 가정하고 있다. 쉽게 설명했다는 책도 전문 용어로 가득하다. 비전공자나 수학적 기초가 약한 독자는 전문 용어에 두려움을 느끼며 이 주제를 이해할 만큼 자신이 똑똑하지 않다고 느끼며 이 주제를 회피한다. 그러나 자료 구조와 알고리즘은 대부분 상식선에서 이해할 수 있다. 엄밀한 수학적 분석이 아니어도 직관으로 이해할 수 있는 범위에서 상식이 통하는 설명으로 자료 구조와 알고리즘을 이해해보자.
Contents
1장 자료 구조가 중요한 까닭

__1.1 자료 구조
__1.2 배열: 기초 자료 구조
____1.2.1 자료 구조 연산
__1.3 속도 측정
__1.4 읽기
__1.5 검색
__1.6 삽입
__1.7 삭제
__1.8 집합: 단 하나의 규칙으로 효율성이 달라진다
__1.9 마무리
__1.10 연습 문제

2장 알고리즘이 중요한 까닭

__2.1 정렬된 배열
__2.2 정렬된 배열의 검색
__2.3 이진 검색
____2.3.1 코드 구현: 이진 검색
__2.4 이진 검색 대 선형 검색
____2.4.1 깜짝 퀴즈
__2.5 마무리
__2.6 연습 문제

3장 빅 오 표기법

__3.1 빅 오: 원소가 N개일 때 몇 단계가 필요할까?
__3.2 빅 오의 본질
____3.2.1 빅 오의 본질 더 파고들기
____3.2.2 같은 알고리즘, 다른 시나리오
__3.3 세 번째 유형의 알고리즘
__3.4 로가리즘
__3.5 O(logN) 해석
__3.6 실제 예제
__3.7 마무리
__3.8 연습 문제

4장 빅 오로 코드 속도 올리기

__4.1 버블 정렬
__4.2 버블 정렬 실제로 해보기
____4.2.1 버블 정렬 구현
__4.3 버블 정렬의 효율성
__4.4 이차 문제
__4.5 선형 해결법
__4.6 마무리
__4.7 연습 문제

5장 빅 오를 사용하거나 사용하지 않는 코드 최적화

__5.1 선택 정렬
__5.2 선택 정렬 실제로 해보기
____5.2.1 선택 정렬 구현
__5.3 선택 정렬의 효율성
__5.4 상수 무시하기
__5.5 빅 오 카테고리
____5.5.1 실제 예제
____5.5.2 중요한 단계
__5.6 마무리
__5.7 연습 문제

6장 긍정적인 시나리오 최적화

__6.1 삽입 정렬
__6.2 삽입 정렬 실제로 해보기
____6.2.1 삽입 정렬 구현
__6.3 삽입 정렬의 효율성
__6.4 평균적인 경우
__6.5 실제 예제
__6.6 마무리
__6.7 연습 문제

7장 일상적인 코드 속 빅 오

__7.1 짝수의 평균
__7.2 단어 생성기
__7.3 배열 예제
__7.4 평균 섭씨 온도 구하기
__7.5 의류 상표
__7.6 1 세기
__7.7 팰린드롬 검사기
__7.8 모든 곱 구하기
____7.8.1 여러 데이터 세트 다루기
__7.9 암호 크래커
__7.10 마무리
__7.11 연습 문제

8장 해시 테이블로 매우 빠른 룩업

__8.1 해시 테이블
__8.2 해시 함수로 해싱
__8.3 재미와 이익, 특히 이익을 남길 유의어 사전 만들기
__8.4 해시 테이블 룩업
____8.4.1 단방향(one-directional) 룩업
__8.5 충돌 해결
__8.6 효율적인 해시 테이블 만들기
____8.6.1 훌륭한 충돌 조정
__8.7 해시 테이블로 데이터 조직
__8.8 해시 테이블로 속도 올리기
____8.8.1 배열 부분 집합
__8.9 마무리
__8.10 연습 문제

9장 스택과 큐로 간결한 코드 생성

__9.1 스택
__9.2 추상 데이터 타입
__9.3 스택 다뤄보기
____9.3.1 코드 구현: 스택 기반 코드 린터
__9.4 제약을 갖는 데이터 구조의 중요성
____9.4.1 스택 요약
__9.5 큐
____9.5.1 큐 구현
__9.6 큐 다뤄보기
__9.7 마무리
__9.8 연습 문제

10장 재귀를 사용한 재귀적 반복

__10.1 루프 대신 재귀
__10.2 기저 조건
__10.3 재귀 코드 읽기
__10.4 컴퓨터의 눈으로 바라본 재귀
____10.4.1 호출 스택
____10.4.2 스택 오버플로
__10.5 파일시스템 순회
__10.6 마무리
__10.7 연습 문제

11장 재귀적으로 작성하는 법

__11.1 재귀 카테고리: 반복 실행
____11.1.1 재귀 트릭: 추가 인자 넘기기
__11.2 재귀 카테고리: 계산
____11.2.1 두 가지 계산 방식
__11.3 하향식 재귀: 새로운 사고방식
____11.3.1 하향식 사고 절차
____11.3.2 배열 합
____11.3.3 문자열 뒤집기
____11.3.4 X 세기
__11.4 계단 문제
____11.4.1 계단 문제 기저 조건
__11.5 애너그램 생성
____11.5.1 애너그램 생성의 효율성
__11.6 마무리
__11.7 연습 문제

12장 동적 프로그래밍

__12.1 불필요한 재귀 호출
____12.1.1 max 재귀 분석
__12.2 빅 오를 위한 작은 개선
__12.3 재귀의 효율성
__12.4 하위 문제 중첩
__12.5 메모이제이션을 통한 동적 프로그래밍
____12.5.1 메모이제이션 구현
__12.6 상향식을 통한 동적 프로그래밍
____12.6.1 상향식 피보나치
____12.6.2 메모이제이션 대 상향식
__12.7 마무리
__12.8 연습 문제 256

13장 속도를 높이는 재귀 알고리즘

__13.1 분할
____13.1.1 코드 구현: 분할
__13.2 퀵 정렬
____13.2.1 코드 구현: 퀵 정렬
__13.3 퀵 정렬의 효율성
____13.3.1 한눈에 보는 퀵 정렬
____13.3.2 빅 오로 나타낸 퀵 정렬
__13.4 퀵 정렬의 최악의 시나리오
____13.4.1 퀵 정렬 대 삽입 정렬
__13.5 퀵 셀렉트
____13.5.1 퀵 셀렉트의 효율성
____13.5.2 코드 구현: 퀵 셀렉트
__13.6 다른 알고리즘의 핵심 역할을 하는 정렬
__13.7 마무리
__13.8 연습 문제

14장 노드 기반 자료 구조

__14.1 연결 리스트
__14.2 연결 리스트 구현
__14.3 읽기
____14.3.1 코드 구현: 연결 리스트 읽기
__14.4 검색
____14.4.1 코드 구현: 연결 리스트 검색
__14.5 삽입
____14.5.1 코드 구현: 연결 리스트 삽입
__14.6 삭제
____14.6.1 코드 구현: 연결 리스트 삭제
__14.7 연결 리스트 연산의 효율성
__14.8 연결 리스트 다루기
__14.9 이중 연결 리스트
____14.9.1 코드 구현: 이중 연결 리스트 삽입
____14.9.1 앞과 뒤로 이동
__14.10 이중 연결 리스트 기반 큐
____14.10.1 코드 구현: 이중 연결 리스트 기반 큐
__14.11 마무리
__14.12 연습 문제

15장 이진 탐색 트리로 속도 향상

__15.1 트리
__15.2 이진 탐색 트리
__15.3 검색
____15.3.1 이진 탐색 트리 검색의 효율성
____15.3.2 log(N) 레벨
____15.3.3 코드 구현: 이진 탐색 트리 검색
__15.4 삽입
____15.4.1 코드 구현: 이진 탐색 트리 삽입
____15.4.2 삽입 순서
__15.5 삭제
____15.5.1 자식이 둘인 노드 삭제
____15.5.2 후속자 노드 찾기
____15.5.3 오른쪽 자식이 있는 후속자 노드
____15.5.4 완전한 삭제 알고리즘
____15.5.5 코드 구현: 이진 탐색 트리 삭제
____15.5.6 이진 탐색 트리 삭제의 효율성
__15.6 이진 탐색 트리 다뤄보기
__15.7 이진 탐색 트리 순회
__15.8 마무리
__15.9 연습 문제 345

16장 힙으로 우선순위 유지하기

__16.1 우선순위 큐
__16.2 힙
____16.2.1 힙 조건
____16.2.2 완전 트리
__16.3 힙 속성
__16.4 힙 삽입
__16.5 마지막 노드 탐색
__16.6 힙 삭제
__16.7 힙 대 정렬된 배열
__16.8 다시 살펴보는 마지막 노드 문제
__16.9 배열로 힙 구현하기
____16.9.1 배열 기반 힙 순회
____16.9.2 코드 구현: 힙 삽입
____16.9.3 코드 구현: 힙 삭제
____16.9.4 대안 구현
__16.10 우선순위 큐로 쓰이는 힙
__16.11 마무리
__16.12 연습 문제

17장 트라이(trie)해 보는 것도 나쁘지 않다

__17.1 트라이
____17.1.1 트라이 노드
____17.1.2 트라이 클래스
__17.2 단어 저장
____17.2.1 별표(asterisk)의 필요성
__17.3 트라이 검색
____17.3.1 코드 구현: 트라이 검색
__17.4 트라이 검색의 효율성
__17.5 트라이 삽입
____17.5.1 코드 구현: 트라이 삽입
__17.6 자동 완성 개발
____17.6.1 단어 수집
____17.6.2 재귀 연습(walk-through)
__17.7 자동 완성 마무리
__17.8 값을 포함하는 트라이: 자동 완성 업그레이드
__17.9 마무리
__17.10 연습 문제

18장 그래프로 뭐든지 연결하기

__18.1 그래프
____18.1.1 그래프 대 트리
____18.1.2 그래프 용어
____18.1.3 기초 그래프 구현
__18.2 방향 그래프
__18.3 객체 지향 그래프 구현
__18.4 그래프 탐색
__18.5 깊이 우선 탐색
____18.5.1 깊이 우선 탐색 연습
____18.5.2 코드 구현: 깊이 우선 탐색
__18.6 너비 우선 탐색
____18.6.1 너비 우선 탐색 연습
____18.6.2 코드 구현: 너비 우선 탐색
____18.6.3 깊이 우선 탐색 대 너비 우선 탐색
__18.7 그래프 탐색의 효율성
____18.7.1 O(V + E)
__18.8 가중 그래프
____18.8.1 가중 그래프 코드
____18.8.2 최단 경로 문제
__18.9 데이크스트라의 알고리즘
____18.9.1 데이크스트라의 알고리즘 준비
____18.9.2 데이크스트라의 알고리즘 단계
____18.9.3 데이크스트라의 알고리즘 연습
____18.9.4 최단 경로 찾기
____18.9.5 코드 구현: 데이크스트라의 알고리즘
____18.9.6 데이크스트라의 알고리즘의 효율성
__18.10 마무리
__18.11 연습 문제

19장 공간 제약 다루기

__19.1 공간 복잡도의 빅 오
__19.2 시간과 공간 트레이드오프
__19.3 재귀에 숨겨진 비용
__19.4 마무리
__19.5 연습 문제

20장 코드 최적화 기법

__20.1 전제 조건: 현재 빅 오 파악하기
__20.2 시작점: 상상할 수 있는 최상의 빅 오
____20.2.1 상상의 나래 펼치기
__20.3 룩업 마법
____20.3.1 저자 룩업 마법
____20.3.2 자료 구조 추가하기
____20.3.3 두 수의 합(two-sum) 문제
__20.4 패턴 인식
____20.4.1 동전 게임
____20.4.2 예제 생성
____20.4.3 합 교환(sum swap) 문제
__20.5 탐욕 알고리즘
____20.5.1 배열 최댓값
____20.5.2 최대 부분 합
____20.5.3 탐욕스러운 주가 예측
__20.6 자료 구조 변경
____20.6.1 애너그램 검사기
____20.6.2 그룹 정렬
__20.7 요약
__20.8 작별 인사
__20.9 연습 문제
Author
제이 웬그로우,심지현
세상을 코딩하는 법을 가르치는 데 전념하고 있는 전문 교육자이자 개발자이다. 코딩 부트캠프와 실습을 가르치는 Actualize의 설립자이자 CEO이다. "누구나 코딩할 수 있다(Anyone Can Learn To Code)"라는 교육 회사에서 온라인으로 코딩을 가르치고 있으며, 고등학교 컴퓨터 과학 커리큘럼, 기업체 교육 훈련을 운영하고 있다.
세상을 코딩하는 법을 가르치는 데 전념하고 있는 전문 교육자이자 개발자이다. 코딩 부트캠프와 실습을 가르치는 Actualize의 설립자이자 CEO이다. "누구나 코딩할 수 있다(Anyone Can Learn To Code)"라는 교육 회사에서 온라인으로 코딩을 가르치고 있으며, 고등학교 컴퓨터 과학 커리큘럼, 기업체 교육 훈련을 운영하고 있다.