Summary of all the problems

2021-06-01

程序由数据结构和算法组成,一个程序的输入和输出已经给定,剩余的就是如何排列组合数据结构和算法进行一个图搜索来找到最佳组合。

目前构造的思维导图如下:

Algorithm Classification

Data Structure

数据结构基本上分为数组、链表、树、哈希、栈、堆、设计

Array

数组类知识点主要在于如何对于随机读取的线性结构进行数据的过滤处理,请看Array Introduction

Linked List

链表主要是对于数据合并可以进行很好的操作,不过如果是unordered_map + list这种双链表结构,是可以实现O(1)读取的。请看 Linked List Summary

Tree

树是进行二分搜索查找极好的数据结构。比较高阶的就有:binary search tree,trie,binary indexed tree,segment tree。请看总结:Tree

Hash

哈希本质就是进行快速索引,以及对键值进行某种程度的管理。具体情况:Hash

Stack

Stack栈,是一种后进先出的数据结构,在进行递归的时候,很适合使用,请看 Stack

Heap

Heap是一种先进先出的数据结构,当然经过了改进,后面有了双向的deque和极值在堆顶的特殊结构,请看Heap

Design

系统设计其实是算法和数据结构的结合,但是也可以理解为对各种数据组合之后创造了新的数据结构,这个数据结构支持某些特殊的操作,具体请看:Design.

Algorithms

算法涉及大类,DP、greedy、graph、binary search、sort、divide & conquer。

DP

动态规划进行记忆化搜索来加速算法,请看DP

Greedy

贪心算法是用来在求解最优化问题中,所求问题正好是可以使用局部最优解作为最终的最优解的问题的处理。具体请看: Greedy

Graph

图是很大的一个话题,图用于构造不同object之间的联系,来获取其中联系的某些特征。具体看:Graph

二分搜索是搜索目标,有些骚操作可以转化问题求解搜索的最佳答案。请看:Binary Search

Sort

排序是个很有用的东西,C++里面有集成的排序了,还有稳定排序。请看:sort

Divide & Conquer

分而治之是一种编程集大成的思想,具体参考: Divide & Conquer

Math

数学也是经常考的一个专题,这个专题目前总结了位操作、几何学、扫描线、概率、数学理论。

Bit manipulation

位操作,进行各种位操作,可以实现意想不到的组合,具体请看:Bit Manipulation

Geometry

几何学方面,对于求取轮廓之类的有较大的帮助,具体可以看:Geometry

Line Sweep

扫描线对于求解区间问题是个大杀器,可以看:Line Sweep

Probability

这里主要是求解各种随机数,可以进行各种采样。请看: Probability

Number Theory

数学理论涉及各种数学的操作,脑筋急转弯等等,具体请看: Theory