算法导论巩固笔记(1)

下个月开始要从事服务器工作了,于是捡起一些CS的基础课,巩固一下原先的知识。

先从算法开始,配合网易的公开课,传送门


第一课介绍了两种排序算法,插入和归并。


1. 影响运行时间的因素:

·输入(比如已经排序好的输入)

·输入规模(输入6个数或输入6X10^9)

-将输入规模参数化

·运行时间的上限

-对用户的保证(比如运行时间少于3秒,这就是一个用户如何使用该程序的真实信息)


2.算法分析:

·最坏情况分析

-T(n)定义为输入规模n的最长运行时间

·平均消耗时间:

-T(n)此时定义为输入规模n的期望时间


3.渐近分析(Asymptotic analysis),即时间复杂度

·忽略硬件因素

·不关注实际运行了多少时间,而是关注了增长 (T(n), n->∞)

·Θ符号(即O(n)的O)代表忽略低阶项

特例:


如图有时候我们会对O(n^3)的算法感兴趣,因为n0可能是一个非常大的数,大到计算机无法处理,这时O(n^3)的算法就比O(n^2)的更优


4.插入算法和归并算法时间复杂度比较,并推导归并算法时间复杂度:

·插入排序分析

-最坏情况:O(n^2) 算术级数

-插入排序快吗: 规模n足够小时,比较快;但是规模n变大后就很慢了。

·归并算法分析:

-具体算法: 

a.如果n为1,则结束排序  O(1)

b.递归操作,划分元素: 前一半元素 1到Ceil(n/2) 后一半元素 Ceil(n/2) + 1到n     2T(n/2)

c.合并当前两组元素:顺序或逆序比较两张表的元素大小,放入最后的结果表中         O(n)

-推导

T(n) = O(1) if n =1; 2T(n/2) + O(n) if n > 1

递归树:



解读:

a.每一层都是线性复杂度c*n

b.树的高度为lgn (n折半到1,复杂度lgn)

c.所有叶子节点的时间复杂度O(n)

d.总时间复杂度为 T(n) = (c*n)*lgn + O(n)  省略低阶项O(n)即为O(n*lgn)


资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值