算法导论 第一部分 基础知识

算法导论 第一部分 基础知识

引言

在这里插入图片描述
在这里插入图片描述

第一章 算法在计算中的作用

算法

简单来讲,所谓**算法(algorithm)**就是定义良好的计算过程,它取一个或一组值作为输入,并产生一个或一组值作为输出。亦即,算法就是一系列的计算步骤,用来将输入数据转换成输出结果。

算法也是一种工具,用来解决一个具有良好规格说明的计算问题。
有关该问题的表达可以用通用的语言,来规定所需要的输入/输出关系。与之对应的算法则描述了一个特定的计算过程,用于实现这一输入/输出关系

例如,假设需要将一列数按照非降序进行排序
在这里插入图片描述
算法可以解决哪些类型的问题?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据结构
在这里插入图片描述
技术
在这里插入图片描述
一些比较难的问题
在这里插入图片描述
在这里插入图片描述

作为一种技术的算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算法和其他技术
在这里插入图片描述

算法入门

插入排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Python实现

class Solution(object):
    def insertionSort(self,a_list):
        for key,item in enumerate(a_list):
            print(key,item)
            index = key
            while index > 0 and a_list[index-1] > item:
                a_list[index] = a_list[index-1]
                index -= 1
            a_list[index] = item
        return a_list

算法分析

在这里插入图片描述

插入排序算法的分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最坏情况和平均情况分析

在这里插入图片描述
在这里插入图片描述

增长的量级

在这里插入图片描述

算法设计

在这里插入图片描述

分治法

有很多算法在结构上是递归的:
为了解决一个给定的问题,算法要一次或多次地递归调用其自身来解决相关子问题。这些算法通常采用分治策略:将原问题划分成 n 个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Python实现

class Solution(object):
	def mergeSort(self,a_list):
		if len(a_list) > 1:
			mid = len(a_list)//2
			lefthalf = a_list[:mid]
			righthalf = a_list[mid:]

			self.mergeSort(lefthalf)
			self.mergeSort(righthalf)
			
			i,j,k = 0,0,0
			while i < len(lefthalf) and j < len(righthalf):
				if lefthalf[i] < righthalf[j]:
					a_list[k] = lefthalf[i]
					i += 1
				else:
					a_list[k] = righthalf[j]
					j += 1
				k += 1

			while i < len(lefthalf):
				a_list[k] = lefthalf[i]
				i += 1
				k += 1
			while j < len(righthalf):
				a_list[k] = righthalf[j]
				j += 1
				k += 1
		return a_list
			
分治法分析

在这里插入图片描述

在这里插入图片描述

函数的增长

在这里插入图片描述

渐进记号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标准记号和常用函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归式

在这里插入图片描述

代换法

用代换法解递归式需要两个步骤:
1)猜测解的形式
2)用数学归纳法找出使解真正有效的常数

“代数法”这一名称源于当归纳假设用较小值时,用所猜测的值代替函数的解

此方法很有效 但是只能用于解的形式很容易猜的情形。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归树方法

画出一个递归树是一种得到还猜测的直接方法。

在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。我们将树中每一层内的代价相加得到一个没层代价的集合,再将每层的代价相加得到递归是所有层次的总代价。当用递归式表示分治算法的运行时间时,递归树的方法尤其有用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主定理的证明

在这里插入图片描述

取正合幂时的证明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上取整数函数和下取整函数

在这里插入图片描述
在这里插入图片描述

概率分析和随机算法

在这里插入图片描述

雇用问题

在这里插入图片描述

最坏情况分析

在这里插入图片描述
在这里插入图片描述

概率分析

在这里插入图片描述

随机算法

在这里插入图片描述

指示器随机变量

在这里插入图片描述
在这里插入图片描述

利用指示器随机变量分析雇用问题

在这里插入图片描述
在这里插入图片描述

随进算法

在这里插入图片描述
在这里插入图片描述

随机排列数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

概率分析和指示器随机变量的进一步使用

在这里插入图片描述

生日悖论

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

球与盒子

在这里插入图片描述

序列

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在线雇用问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值