计算中能遇到无数种问题,但只有少数领域的问题引起了特殊关注。下面简单介绍这些重要的问题类型
1.排序
排序问题要求我们按升序(降序)重新排列给定列表中的数据项。在对记录排序时需要选取一段信息作为排序的依据,这段特别选定的信息称为
键。
排序算法中有两个特性:稳定(
保留了相等元素在输入中的相对位置),In-place(
不占用额外内存或占用常数的内存)。
稳定的排序算法:
冒泡排序、插入排序、归并排序、基数排序
In-place sort :插入排序、选择排序、冒泡排序、堆排序、快速排序
Out-place sort:归并排序、计数排序、基数排序、桶排序
2.查找
查找问题是在给定的集合(或者是允许多个元素具有相同值的多重集)中寻找一个给定的值。
查找问题一般需要结合另外两种操作一起考虑:数据集合中添加和删除元素的操作。这这种情况下,必须仔细选择数据结构和算法,从各种操作的需求之间找到一个平衡。
五中常用的查找方法:顺序查找、二分查找(折半查找)、二叉排序树查找、哈希表法(散列表)、分块查找。
3.字符串处理
字符串是字母表中的符号所构成的序列。在文本中查找一个给定的词称为字符串匹配问题。
字符串匹配问题的三种算法:
蛮力字符串匹配、Horspool算法、Boyer-Moore算法。
4.图问题
基本的图算法包括图的遍历算法(
深度优先算法、广度优先算法)、最短路线算法(
Dijkstra算法)以及有向图的拓扑排序。
图问题中的经典问题:
旅行商问题和图填色问题。
两个经典的计算几何问题:
最近对问题和凸包问题。