Stanford-Coursera 算法Week1 笔记

题外话:全文免费放心食用,作者在此求个 三连+关注

1. Integer Multiplication(引入)

(很小的时候我们就学过:两个数字相乘的算法——将输入(两个数字)转换为输出(它们的乘积)的一组定义良好的规则;算法就是类似的:一个计算问题(输入和期望的输出),然后描述一个或多个解决该问题的算法)

1)定义计算问题:在整数乘法问题中,输入是两个n位数,我们称之为x和y, x和y的长度n可以是任意正整数;整数乘法问题的期望输出就是x·y

2)定义primitive operations:

     (i) 两个个位数相加;(ii) 两个个位数相乘;(iii)在数字的开头或结尾添加零  

e.g:  x = 5678 and y = 1234 (so n = 4).

计算会有n=4行,每行最多2n个操作(primitive operations)

所以最多会有 n · 2n 次 primitive operations

3)改进——下一节 3Karatsuba Multiplication

2.Karatsuba Multiplication

1)为了将x的前半部分和后半部分看作独立的数字,a = 56,b = 78,c = 12,d = 34

2)执行一系列只涉及两位数a, b, c和d的运算

3)将所有项集合在一起,得到x和y的乘积

第一步:计算a·c = 56·12 = 672

第二步:计算b·d = 78·34 = 2652

第三步:计算(a + b)·(c + d) = 134·46 = 6164

第四步:用第三步的结果减去前两步的结果:6164 - 672 - 2652 = 2840

第五步:计算104·672 + 102·2840 + 2652 = 6720000 + 284000 + 2652 = 70066552

2.1  A Recursive Algorithm(引入方便理解)

整数乘法递归方法

偶数n位:

伪代码(有个印象就行):

2.2 转回Karatsuba乘法

Karatsuba乘法是RecIntMult算法的优化版本

我们并不真正关心a·d或b·c,而是它们的和a·d + b·c

因此:只有个量——a·c, a·d + b·c和b·d

Step 1: Recursively递归 compute a · c 

Step 2: Recursively compute b · d

Step 3: Compute a + b and c + d , and recursively compute (a + b) · (c + d)——至此:三次递归

Step 4:用Step 3的结果减去前两步的结果,得到a·d + b·c

Step 5:乘10n次方在step 1的answer,乘10(n/2)次方在step 3的answer,最后把所有结果相加

因此,Karatsuba乘法只进行三次递归调用! 节省递归调用可以节省总体运行时间

3.MergeSort Algorithm

特点

  • Canonical divide-and-conquer algorithm 规范的分治算法:将问题分解为更小的子问题,递归地求解子问题,最后将子问题的解合并为原始问题的解
3.1 Sorting—拓展:十种基本的排序

1.0 十大经典排序算法 | 菜鸟教程 (runoob.com)

3.2 MergeSort—Example

1.递归

As a recursive divide-and-conquer algorithm作为递归分治算法, MergeSort 拆分成了两部分进行递归;第一组递归对前半部分进行排序,返回数组{1,4,5,8};第二组递归调用返回数组{2,3,6,7};最后合并两组

2.合并 Merge Subroutine 子程序

使用索引 k 遍历输出数组,并使用索引 i 和 j 遍历已排序的子数组。所有三个数组都是从左到右遍历的

第3行中的for循环实现了对输出数组的传递。在第一次迭代中,子例程识别C或D中的最小元素,并将其复制到输出数组b的第一个位置。总的来说,最小元素要么在C中(在这种情况下,它是C[1],因为C是排序的),要么在D中(在这种情况下,它是D[1],因为D是排序的)。

3.3 MergeSort—分析

因为mergesort相当于是递归+merge,所以会涉及到对递归树的分析

层数计算:

每一层的子问题&子问题大小:

4. Asymptotic Analysis 渐进分析

4.1 Big-O Notation 基础

是什么?

  • 为了讨论算法的设计和分析——为讨论算法的high-level performance提供了一个最佳点
  • 粗糙:压制住想要忽略的细节,细节取决于architecture、programming language、compiler...
  • 敏锐:常见问题的不同高级算法间进行预测性比较,尤其是large inputs

 “O”---为了找到解决问题的最佳高级算法

意思就是:

suppress constant factors & lower-order terms

抑制常数项和低阶项

结合下面例子:

抑制6n和“6”

所以running time是“big-O of nlog n” 即  O(nlogn)

例子1:

running time:O(n)

例子2:

running time:O(n)

为啥呢?其实是2n但2被抑制了

例子3:

running time:O(n^{2})

例子4:

running time:O(n^{2})

解释:外部循环从1到n,内部循环从i+1到n。内部循环的迭代次数取决于外部循环的当前迭代次数。

考虑最坏的情况,数组A中的所有元素都是相同的。在这种情况下,内部循环的迭代次数为: 1 + 2 + 3 + ... + (n-1) = n*(n-1)/2,总的迭代次数为n*(n-1)/2

4.2 Big-O Notation 正式定义

Big-O notation 关注 T(n),n = 1, 2,....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全资源和参考指南

由美国国防部(DoD)发布的《网络安全资源和参考指南》,旨在为美国政府、商业部门以及美国盟友和伙伴之间的安全合作提供有用的、现成的参考资料。文档涵盖了网络安全规范、最佳实践、政策和标准,这些都是由美国联邦政府、国防部以及…

软件测试学习

软件测试学习 编辑时间:2024/5/17 0.理论学习 第一单元 Q开发工程师和测试工程师的关系理解 Q软件测试的目的和原则,识记、理解 为什么要进行软件测试 软件产品最终具备哪些功能由客户需求决定,客户需求如何转化为最终的软件产品要…

Wpf 使用 Prism 实战开发Day23

自定义对话框服务 当原有对话框不能满足需求的时候,可以通过自定义对话框来实现特殊的需求 一.自定义对话框主机服务步骤: 1.建立一个IDialogHostService 接口类,继承自 IDialogService 对话框服务类。并且自定义基类的服务方法。 public …

【嵌入式软件工程师面经】Socket,TCP,HTTP之间的区别

目录: 目录 目录: 一、Socket原理与TCP/IP协议 1.1 Socket概念: 1.2 建立Socket连接: 1.3 SOCKET连接与TCP/IP连接 二、HTTP连接: 2.1 HTTP原理 三、三者的区别和联系 前些天发现了一个巨牛的人工智能学习网站&#xf…

markdown 文件渲染工具推荐 obsidian publish

背景 Markdown 是一种轻量级的标记语言,最开始使用它是觉得码字非常方便,从一开始的 word 排版到 markdown ,还不太不习惯,用了 obsidian把一些文字发在网上后,才逐渐发现他的厉害之处。 让人更加专注于内容本身&…

C语言 浮点数 打印的方法

一、方式1 在C语言中&#xff0c;浮点数&#xff08;通常包括 float 和 double 类型&#xff09;的打印是通过标准库中的 printf 函数完成的。为了正确地打印浮点数&#xff0c;需要使用格式说明符来指定如何格式化输出。 #include <stdio.h> int main(void) { floa…

体量小但增速快,国内OTA平台与国际巨头差在哪?

5月3日&#xff0c;Booking、Expedia等国际OTA平台相继发布2024年第一季度财报。5月21日&#xff0c;携程发布2024年第一季度财报。至此&#xff0c;国内外主要OTA平台一季度成绩单均已披露。 受益于全球旅游市场复苏&#xff0c;三家OTA平台一季度营收同比均正向增长。增长之…

03-ArcGIS For JavaScript结合ThreeJS功能

ArcGIS For JavaScript结合ThreeJS功能 概述three.js中功能实现externalRenderers&#xff08;4.28及以下版本&#xff09;RenderNode&#xff08;4.29版本&#xff09; 概述 ArcGIS For Javacript提供了一些对象可以支持加载webgl上下文信息&#xff0c;这里包括webgl编程的代…

基于jeecgboot-vue3的Flowable增加流程支持组件与element-plus组件导入支持

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、package.json文件需要增加相关流程组件&#xff0c;如下 "dependencies": {"element-plus/icons-vue": "^2.3.1","highlightjs/vue-plugin":…

蔬菜水果店做配送分销小程序的作用是什么

蔬菜水果是人们生活必需&#xff0c;传统为线下市场、超市、路边小摊等场景购买&#xff0c;如今快节奏时代&#xff0c;用户需要更快完成消费、商家也需要摆脱竞争获客转化以及提升自己的运营能力。 蔬菜水果隔三岔五或每天都会购买&#xff0c;老客粘性较高&#xff0c;还需…

文字生成图像内容解决方案,享受创作的乐趣

企业对于内容创新和视觉呈现的需求日益增强&#xff0c;美摄科技凭借其卓越的技术实力&#xff0c;推出了一款面向企业的文字生成图像内容解决方案。通过该方案&#xff0c;企业能够轻松将文字内容转化为高质量的图像&#xff0c;实现内容创作的全新突破。 一、车机语音交互&a…

【漏洞复现】懒人网址导航页 search.html SQL注入漏洞

0x01 产品简介 赖人网址导航系统是一种智能化的网址导航平台&#xff0c;旨在帮助用户快速找到所需的网址和资源。该系统提供了智能化的网址搜索和推荐功能&#xff0c;能够根据用户的搜索习惯和偏好推荐相关的网址和资源。同时&#xff0c;系统还提供了网址分类、网址收藏和网…

高仿百度网页(附带源码)

高仿百度网页 效果图部分源码及素材领取源码下期更新预报 效果图 部分源码及素材 <script language"javascript">function show_date_time() {window.setTimeout("show_date_time()", 1000);BirthDay new Date("1/20/2023 16:52:21");//…

OpenMV学习笔记1——IDE安装与起步

目录 一、OpenMV IDE下载 二、OpenMV界面 三、Hello World&#xff01; 四、将代码烧录到OpenMV实现脱机运行 五、插SD卡&#xff08;为什么买的时候没送&#xff1f;&#xff09; 一、OpenMV IDE下载 浏览器搜索OpenMV官网&#xff0c;进入后点击“立即下载”&#xff0…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶&#xff1a;C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1&#xff5b;&#xff5d;初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

python实现对应分析的随笔记

文档来源&#xff1a; Correspondence analysis 1 对应分析 参考&#xff1a; SPSS&#xff08;十二&#xff09;SPSS对应分析&#xff08;图文数据集&#xff09;案例6&#xff1a;SPSS–对应分析10 对应分析 对应分析的实质&#xff08;理论很复杂&#xff0c;但是结果很明…

创新指南|利用电商产品视频进行渠道营销的最佳策略,不断提升销售额

无论企业的利基市场如何&#xff0c;电商产品视频都已被证明是非常可靠的资产&#xff0c;可以让目标受众了解您所提供的产品——关键功能、展示重要的差异化优势甚至改变大多数营销活动的游戏规则。阅读本文&#xff0c;全面了解电商产品视频如何融入营销推广&#xff0c;以最…

基于python向量机算法的数据分析与预测

3.1 数据来源信息 该数据集来源于Kaggle网站&#xff0c;数据集中包含了罗平菜籽油的销售数据&#xff0c;每行数据对应一条记录&#xff0c;记录了罗平菜籽油销售数据。其中&#xff0c;菜籽产量、菜籽价格和菜籽油价格是数值型数据&#xff0c;共2486条数据。 通过读取Exce…

SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池&#xff1f; 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…