数据结构与算法(1)

出自网络公开课 https://www.bilibili.com/video/av22774520?from=search&seid=10695542251210958364 的课堂笔记
课程1-24

算法是什么?
根据问题,借助工具,有一套固定的程序步骤来解决问题。

算法的有穷性?
一个看着正确的程序不一定是算法。需要考虑程序是否会陷入死循环。

什么样的算法才是好算法?
正确;健壮;可读;效率(最后两条尤其是最后一条最重要,既要马儿跑,又要马儿吃得少)
Algorithms + Data Structures = Programs
Programs X Efficiency = Computation

计算模型可分为什么?
数据结构+算法

度量的重要性:To mesure is to know. If you can not measure it, you can not improve it. -Lord Kelvin

算法分析的两个方面?
正确性:算法功能与问题要求是否一致
成本:运行时间+所需存储空间

对于成本,该如何度量呢?
我们可以用算法求解一个实例的计算成本,可是实例太多,光计算一个没有意义。所以我们需要归纳概括。
问题实例的规模,往往是决定计算成本的主要因素。
但是就算是同一问题等规模的不同实例,计算成本也不尽相同,甚至了实质差别。
为稳妥起见,我们会关注实例所需成本最高者。

对于不同的算法,如何评判优劣呢?
实验统计是最直接的方法,但不足以真正反映算法的真正效率。
为给出客观的评判,需抽象出一个理想的平台或模型,直接准确地评判优劣。

大O记号的特点:
好读书不求甚解。每有会意,便欣然忘食。
关注的是长远和主流。
这里写图片描述

O(1)
常数复杂度
这里写图片描述

O(logn)
对数复杂度
这里写图片描述

多项式复杂度
这里写图片描述

算法分析
这里写图片描述

级数
这里写图片描述
这里写图片描述

循环与级数
这里写图片描述

在有些情况下,不论问题规模多大,也可以是常数复杂度。
这里写图片描述

起泡排序
这里写图片描述
通过论证不变性和单调性推出正确性
这里写图片描述

基本的时间概念(封底估算)
在三生三世中的一秒,相当于在一天中的一秒
这里写图片描述

一个封底估算的实例
这里写图片描述

分而治之的思想
这里写图片描述

数组求和
一般认为空间复杂度为除了输入以外,为了求解而所需要的空间。这里有两个,即sum 和 i
这个算法不难,但是我们注意到它的思想是,每经过一次迭代,它的规模减小一些,下面引出一种减而治之的思想。
这里写图片描述

减而治之 decrease and conquer
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42936560/article/details/81627848