首页 > 编程语言 >扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量

时间:2023-04-22 13:07:01浏览次数:36  
标签:02 循环体 06 变量 算法 循环 data target

循环不变量

1、循环开始时需要做什么?

之前我们讲的线性查找法的核心代码如下:

public static <E> int search(E [] data,E target){
    for (int i = 0; i < data.length; i++)
        if (data[i].equals(target))
            return i;
    return -1;
}

我们是否有思考过,这样一个简单的查找算法,用到了循环,但是每一轮循环开始前,需要满足的条件是什么?

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_算法正确性

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_i++_02

其实,循环开始时,需要确认:
确认data[i]是否是目标
通过语句,if (data[i].equals(target))判断

循环体执行完一次时:
我们确认了data[i]不是目标,换句话,即:data[0…i]中没有找到目标。

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_i++_03

注:方括号[]表示的时闭区间,圆括号()表示的是开区间。
闭区间包含开闭的元素,开区间不包含开闭的元素。
也可以半开半闭,即:(],或者[)。
即:data[0…i],也可以表示为data[0…i-1)

2、什么是循环不变量?

什么是循环不变量呢?
循环不变量定义:即每一轮循环开始时,循环都满足的性质或者条件。

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_算法正确性_04

3、循环不变量的作用

循环不变量的作用,其实如定义所讲,帮助我们厘清每一轮循环开始时循环所处的条件。有助于厘清算法实现的思路。

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_算法正确性_05

在循环中,循环体的作用,就是维持循环不变量。

循环体和循环不变量的关系,本身也是”证明“算法正确性的一种方式。
这里的”证明“用了引号,因为并不是严谨的数学证明。

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_算法正确性_06

其实,每次循环开始时,满足一个条件,
即:data[0……i-1]中没有找到目标。

总结重点:
写出正确的代码,需要定义清楚循环不变量,循环体的作用就是为了维持循环不变量。

扎实打牢数据结构算法根基,从此不怕算法面试系列之006 week01 02-06 循环不变量_算法正确性_07



标签:02,循环体,06,变量,算法,循环,data,target
From: https://blog.51cto.com/u_15708686/6215235

相关文章

  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之007 week01 02-07 简单的复杂度分析
    1、复杂度分析复杂度分析本身是非常理论化的一个内容,在计算机科学中,有一个专门的学科叫做——计算复杂性理论。很多童鞋看过《算法导论》,这本书的内容很多很强调算法导论。但是实际上,对于普通程序员来说,不需要过度强调理论化的内容。因为工作中更多面对的是实际的软件工程,工程化的......
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之003 week01 02-03 代码实现线性查找
    1、算法描述在数组中逐个查找元素,即遍历。2、思路原理如算法描述,基本是最简单的代码块了,没有什么额外的原理。3、初步的代码实现线性查找法初步的代码实现:packagecom.mosesmin.datastructure.week01.chap02;/***@Misson&Goal代码以交朋友、传福音*@ClassNameLinearSearc......
  • 02:基础入门-数据包拓展
    1、网站解析对应简要网站搭建过程涉及到的攻击层面?(源码、搭建平台、系统、网络层等)涉及到的安全问题?(目录、敏感文件、弱口令、IP及域名等)2、HTTP/S数据包1.无代理request请求数据包response返回数据包2.有代理request请求数据包proxy代理服务器response返回数......
  • AGC002E Candy Piles
    尝试考虑\(n=1,n=2,n=3\)的必败必胜条件,寻找一些结论,但是发现即使是\(n=3\)胜负情况已经有些不可描述了,说明我们必须尝试转化问题的形式。注意到操作是全局减,常见的转化是差分,但是差分后的操作仍然没有优秀的性质。继续思考,可以得到一个恰当的转化:注意到游戏结束当且仅当最......
  • 文章学习:基于AVX-512指令集的同态加密算法中大整数运算性能优化与突破
    学习文章:英特尔×同态科技|基于AVX-512指令集的同态加密算法中大整数运算性能优化与突破文章人工智能的安全隐患ChatGPT的成功大部分来源于海量的数据支撑和丰富的数据维度,基于13亿参数量的庞大模型,随着用户的不断涌入,ChatGPT不断迭代进化新的“知识”,而在模型表达能力的增......
  • 06-目录---数据库
    1:链接2:链接3:链接4:链接5:链接6:链接7:链接8:链接9:链接0:链接1:链接2:链接3:链接4:链接5:链接6:链接7:链接8:链接9:链接0:链接1:链接2:链接3:链接4:链接5:链接6:链接7:链接8:链接9:链接0:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接:链接......
  • 热题100_20230421
    128、最长连续序列题目说明给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。解题思路1:排序此法不满足时间复杂度为O(n)先对数组进行排序,当遇到不连续的数时则重置当前的序列......
  • [P8766 [蓝桥杯 2021 国 AB] 异或三角]题解
    P8766[蓝桥杯2021国AB]异或三角题目描述分析题目中给出了三个限制首先我们不妨设\(a,b\ltc\),则而由于我们把\(c\)作为了最大值,原题需要有序对\((a,b,c)\)所以\(ans\ast3\)1.\(1\leqa,b,c\leqn\)2.\(a\oplusb\oplusc=0\)3.\(a+b\gtc\)而在枚举过程中,......
  • 物联网---02.Modbus协议
    一、简介Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以......
  • 放逐 | HBOI 2023 游寄
    本来是四月一日的事情,但是现在还是发在这里吧。高一。\(\sfHBOI2023\)上一次来hust还是上次省选呢。进考场了。???你tm距离开考20分钟才开电脑?我还tm要整vscode呢!我还要打缺省源呢!然后傻逼鼠标滚轮寄了,弄了半天,换到了考场最后面的位置。这意味着确认签字又要被排......