算法学习(一)绪论

算法问题求解步骤:

  • 理解问题:试着手工处理一些小规模的例子,考虑一些特殊的情况;严格确定需要算法处理的实例范围
  • 了解设备的性能:顺序算法or并行算法
  • 在精确解法和近似解法之间做出选择
  • 算法的设计技术
  • 确定适当的数据结构
  • 算法的描述
  • 算法的正确性证明:算法的正确性证明一般使用数学归纳法
  • 算法的分析:时间效率和空间效率。算法应该具有的另一个特性是简单性、一般性。
  • 为算法写代码

算法的几类基本问题

  • 排序
  • 查找
  • 字符串处理
  • 图问题
  • 组合问题
  • 几何问题
  • 数值问题

排序

排序问题是非常重要的,目前已经有几十种不同类型的排序算法,具有不同的特性。注意排序算法的两个特性需要考虑:
稳定性:如果一个排序算法那保留了等值的元素在输入中的位置,就可以叫稳定的。这种特性非常重要。
原位的:如果一个排序算法不需要额外的存储空间,则叫原位的。

查找

查找问题是在给定的集合中查找给定的值。有许多查找算法,比如顺序查找、折半查找等。查找算法没有所谓的稳定性问题,但是面临一些新的问题。必须结合问题仔细选择数据结构和算法,以便达到性能的平衡。特别是对于特大型数据,如何组织数据结构是重大的挑战。

字符串处理

是指在文本中查找给定的值,即字符串匹配问题。

图问题

基本的图算法包括:

  • 图的遍历算法
  • 最短路径算法
  • 有向图的拓扑排序

有一些图问题在计算上非常困难,包括:旅行商问题和图填色问题。

组合问题

从一个排列、组合或者子集中寻找一个组合对象,使得它满足我们需要的特性。
组合问题的难点在于:1.随着问题规模的扩大,组合对象的数量增长极快;2.还没有一种算法能在可以接受的时间内精确解决大多数组合问题。

几何问题

两个经典的计算几何问题:最近对问题和凸包问题

数值问题

涉及连续性的数学问题:解方程、计算定积分、求函数值等
由于实数在计算机内部只能近似表示,对近似数的大量操作导致的舍入误差会累积,导致结果严重歪曲。

基本的数据结构

包括数组、链表、图、树、字典。

单链表、双链表
队列:先进先出
栈:后进先出
图的表示:邻接矩阵、邻接链表
有序树:每一顶点中所有子女都是有序的。比如二叉树。
集合:集合的合并问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值