第十二章:算法与程序设计
文章目录:
一:基本概念
1.算法与程序
1.1 算法
1.2 程序
2.编译预处理
3.面向对象技术
4.程序设计方法
5.SOP标志作业流程
6.工具
6.1 自然语言
6.2 流程图
6.3 N/S图
6.4 伪代码
6.5 计算机语言
二:程序设计 基础
1.常数
2.变量
3.运算符
4.表达式
5.函数
6.循环
6.1 顺序结构
6.2 选择结构
6.3 循环结构
6.3.1 当型和直到型
6.3.2 循环四要素
6.3.3 循环的分析
三:程序设计 算法
1.数值
1.1 迭代
1.2 数论
1.2.1 取数
1.2.2 进制转换
1.2.3 素数
2.非数值
2.1 枚举
2.2 数组
2.2.1 基础
2.2.2 CEUD
2.2.3 进阶
2.3 字符串
3.优化
3.1 算法的性能
3.2 算法的优化
可参考:VB(Visual Basic)程序设计教案、C编程语言、C++程序设计教案、Python程序设计教案、Java编程语言、数据结构
一:基本概念
1.算法与程序
1.1 算法
算法的基本概念概念算法就是解决问题的⽅法和步骤,解决问题的过程就是算法实现的过程在数学中,算法(Algorithm)通常是指按照⼀定规则解决某⼀类问题的明确和有限的步骤算法是解决⼀类问题的⽅法,可以理解为由基本运算及规定的运算符顺序所构成的完整和有限的解题步骤分类根据处理的数据是数值数据还是⾮数值数据,可以分为数值计算算法和⾮数值计算算法两⼤类数值计算算法⽤于科学计算,其特点是少量的输⼊、输出,复杂的运算,例如求⾼次⽅程的近似根、求函数的定积分、求圆周率等⾮数值计算算法⽤于数据管理,其特点是⼤量的输⼊、输出,简单的算术运算和⼤量的逻辑运算,例如对数据的排序、查找等算法说明算法决定程序,是程序设计的核⼼算法通常⽤于解决⼀类问题而不是专⻔针对某⼀个具体的问题⼀种问题通常有很多种不同的解决办法(算法),采⽤不同的算法效率不同算法的两⼤要素操作:包括算术运算、关系运算、逻辑运算等运算符,以及⽤于实现数据传送的操作,包括输⼊、输出、赋值等结构:即控制结构,包括顺序结构、选择结构和循环结构三种基本结构算法的五⼤特性:著名计算机科学家Donald E.Knuth把算法的性质归纳为5点有穷性 ⼜叫有限性,即算法在执⾏有穷个计算步骤后必须终⽌确定性 ⼜叫⽆⼆义性,即每⼀个计算步骤必须是精确地定义,要执⾏的每⼀个动作都是清晰的、⽆歧义的可⾏性 ⼜叫能⾏性,即算法中的运算都是基本运算,原则上可以由⼈们⽤纸和笔在有限的、合理的时间内精确地完成输⼊ ⼀个算法有0个或多个输⼊,作为算法开始执⾏前的初始值,或初始状态输出 ⼀个算法有1个或多个输出,即算法必须有输出
1.2 程序
程序的基本概念①程序是计算机为完成某⼀任务所必须执⾏的⼀系列指令的集合包含⼤量重复性的、事务性的操作的任务适合编程解决,创造性的任务不适合编程解决计算机系统能完成各种⼯作的核⼼是程序,而程序的核⼼是算法,编写程序的过程称为程序设计,设计算法是程序设计的关键②⼀个程序包含两⽅⾯的内容:对数据的描述和对操作的描述著名计算机科学家沃思(Nikiklaus Wirth)提出的经典公式:程序 = 数据结构 + 算法数据结构指定待处理数据的数据类型和数组的组织形式,算法描述对数据进⾏操作的⽅法和步骤③⼀个完整的程序除了以上两个必备要素之外,还应当采⽤⼀定的程序设计⽅法进⾏设计,并⽤某种计算机语⾔来表⽰因此,也可表述为:程序 = 数据结构 + 算法 + 程序设计⽅法 + 语⾔⼯具和环境程序设计的流程步骤分析问题在开始解决问题之初,⾸先要弄清楚所求解问题相关领域的基本知识分析题意,搞清楚问题的含义,要解决的问题的⽬标,问题的已知条件、已知数据以及应该得到什么样的结果数学建模 建⽴计算机可实现的计算模型,也就是把实际问题转化为数学问题,直到得到求解问题的公式算法设计 算法是求解问题的⽅法和步骤,算法设计即设计从给定的输⼊到期望的输出的处理步骤编写程序 选择某种程序设计语⾔,按照设计的算法和选择的语⾔的语法规则编写程序测试运⾏设计测试数据(测试⽤例),尽可能多地找出程序中的错误测试以程序通过编译,没有语法上的错误为前提说明①算机求解问题的过程可以⼤致分成两步:抽象和⾃动化在计算机科学中,抽象是简化复杂的现实问题的最佳途径,包含形式化和数学建模两个要素形式化是指采⽤严格的数学语⾔描述清楚问题的条件、⽬标以及达到⽬标的过程的数学⽅法数学建模是以数学的⽅法来求解问题和描述系统⾏为的⼀种形式化⽅法计算机通过程序实现⾃动化,程序的核⼼是算法,⾃动化分两步:设计算法和编写程序②问题的复杂程度决定了程序的复杂程度分析问题时,⼀般需要和提出问题的⼈进⾏讨论,搞清楚程序的功能,这个过程称为需求分析③如果时间紧迫,可以选择开发效率⾼或⾃⼰熟悉的语⾔,例如Visual Basic语⾔如果要求在多种平台上使⽤,可以选择移植性好的语⾔,例如Java语⾔如果对程序响应要求⾼,可与选择运⾏效率⾼的语⾔,例如C语⾔④证明程序的正确性是极为困难的,⽐较实⽤的⽅法就是测试测试的⽬的是找出错误,调试的⽬的是解决错误
2.编译预处理
概念:编译预处理即在编译之前对源程序进⾏的处理,源程序 → [预处理] → [编译] → ⽬标代码包括⽂件包含 在⼀个源⽂件中插⼊另⼀个源⽂件的全部内容,例如“#include <stdio.h>”常量替换 ⼜叫宏定义,即将程序中所有宏名替换成宏定义(#define)中的内容条件编译 在编译前,按照条件筛选出源程序中的部分代码,再进⾏编译
3.面向对象技术
对象概念对象是类的实例化对象是现实世界中可以独⽴存在、可以区分的实体,也可以是⼀些概念上的实体对象可以⽤对象名、属性和⽅法来描述描述对象名:每个对象区别于其它对象的名字,具有唯⼀性属性:⽤⼀组状态(属性值)来描述的对象的静态特征,即对象拥有的数据⽅法:对属性的各种操作,每⼀个操作决定对象的⼀种功能或⾏为消息消息是对象之间相互请求和相互协作的⼿段,是激活某个对象执⾏其中某个功能的“源”对象之间的相互作⽤通过消息传递来实现,即对象之间的联系是通过消息传递的事件事件就是⼀些能够激活对象功能的动作,不同的事件往往引发对象不同的动作⽤⼾按键、移动⿏标、单击⿏标、打开⽂件、关闭⽂件等都是发⽣在计算机上的事件事件驱动在传统的⾯向过程的应⽤程序中,程序执⾏的先后次序由设计⼈员编写的代码决定,⽤⼾⽆法改变程序的执⾏流程在⾯向对象的程序设计中,程序是由若⼲个规模较小的事件过程组成,特定事件的发⽣将引发对象执⾏相应的事件过程程序的执⾏由事件的发⽣驱动,编写好的⼀段程序并不总是能够被执⾏,只有当对应的某⼀事件发⽣才执⾏这段程序特征封装将对象的属性和⽅法封装成⼀个整体,使对数据的操作只可通过该对象本⾝的⽅法来进⾏封装是⼀种信息隐蔽技术,A对象不能直接操作B对象的数据,只能通过B对象提供的⽅法来实现继承使⽤已存在的类作为基础建⽴新类的技术,新的类可以增加新的属性或新的⽅法,也可以直接使⽤⽗类的属性和⽅法继承是⼀种代码复⽤技术多态同⼀消息被不同对象接收时,可以解释为不同的含义即相同的操作可作⽤于多种类型的对象,并能获得不同的结果
4.程序设计方法
概念⽬前最常⽤的是结构化程序设计⽅法和⾯向对象的程序设计⽅法程序设计的⽅法在很⼤程度上影响到程序设计的成败和程序的质量程序的可靠性(鲁棒性)、易读性、⾼效性和可维护性是衡量程序质量的重要特性结构化程序设计概念结构化程序设计的概念最早由荷兰科学家E.W.Dijkstra提出在软件设计和实现过程中,提倡采⽤“⾃顶向下、逐步细化”的模块化程序设计原则在代码编写时,强调采⽤单⼊口、单出口的3种基本控制结构,避免使⽤goto语句优点结构简单清晰,可读性好,模块化强,符合⼈们解决复杂问题的普遍规律在软件重⽤性、软件维护等⽅⾯有所进步,可以显著提⾼软件开发的效率在应⽤程序的开发种发挥了重要作⽤缺点难以适应⼤型软件的设计,程序和数据分开存储,在开发中容易出错,难以维护程序可重⽤性差,即使⾯对⽼问题,数据类型的变化或处理⽅法的改变都将导致重新设计⾯向对象程序设计概念20世纪80年代时提出,以满⾜现代化软件开发的要求⽤⾯向对象的⽅法解决问题,不再将问题分解为过程,而是将问题分解为对象⽬前,“对象+消息”的⾯向对象的程序设计模式有取代“数据结构+算法”的⾯向过程的设计模式的趋向过程⾯向对象分析(OOA)Object Oriented Analyzing,是⼀种软件开发过程分析的⽅法学把软件开发过程中的每⼀样东西都想象成类,OOA主要关⼼怎样导出系统需要的类⾯向对象设计(OOD) Object Oriented Designing,该阶段的焦点是OOA阶段确定的类如何实现功能的问题⾯向对象实现(OOP)Object Oriented Programming,即采⽤某种⾯向对象语⾔具体实现OOD的设计常⽤的⾯向对象的程序设计语⾔有C++/C#、Java、Visual Basic、Python等说明⾯向对象的程序设计并不是要抛弃结构化程序设计⽅法,而是站在更⾼、更抽象的层次上解决问题当所要解决的问题被分解为低级代码模块时,仍需要结构化编程的⽅法和技巧⾯向对象程序设计分解⼤问题为小问题时采取的思路于结构化⽅法不同区别结构化的分解突出过程,强调代码的功能是如何得以完成⾯向对象的分解突出真实世界和抽象的对象,涉及哪个对象的功能,便由哪个对象⾃⼰去处理不同对象之间通过消息或事件发⽣联系,对象依据接收到的消息或事件进⾏⼯作优点符合⼈们习惯的思维⽅法,便于分析复杂而多变化的问题易于软件的维护和功能的增减可重⽤性好,能⽤继承的⽅式尖端程序开发所⽤的时间与可视化技术相结合,改善了⼯作界⾯
5.SOP标志作业流程
Standard Operating Procedure,SOP,标准作业流程程序设计有⼀个标准化的流程,按照⽼唐总结的流程,可以确保每⼀位考⽣都能写出程序,⾄少能搭建起程序的基本框架
6.工具
算法的表⽰⽅法有很多,常⽤的有⾃然语⾔、程序流程图、N/S图、伪代码和计算机程序设计语⾔等
6.1 自然语言
⽤⼈们使⽤的语⾔,即⾃然语⾔来描述算法通俗易懂,但存在如下缺陷① 易产⽣歧义,即存在⼆义性,往往需要根据上下⽂才能确切判别含义,不太严格② 语句⽐较繁琐、冗⻓,并且很难清楚地表达算法的逻辑流程,尤其对描述含有选择和循环结构的算法时,不太⽅便和直观
6.2 流程图
流程图是描述算法的常⽤⼯具,采⽤⼀些图框、线条以及⽂字说明来形象、直观地描述算法处理过程
6.3 N/S图
![]()
N/S图是⼀种简化的流程图,去掉了流程图中的流程线,全部算法写在⼀个矩形框内N/S图表⽰算法直观、形象,且⽐流程图紧凑易画,实际应⽤中也经常采⽤
6.4 伪代码
![]()
由于绘制流程图较为费时,⾃然语⾔易产⽣歧义和难以清楚表达算法的逻辑流程等缺陷,可以选择使⽤伪代码描述算法伪代码(Pseudo-Code)使⽤介于⾃然语⾔和计算机程序设计语⾔之间的⽂字和符号来描述算法,有如下简单约定伪代码中的约定① 每个算法⽤begin开始,以end结束,若仅表⽰部分实现代码可省略② 每⼀条指令占⼀⾏,指令后不跟任何符号③ “//”标志表⽰注释的开始,⼀直到⾏尾④ 算法的输⼊输出以“input/print”后加参数表的形式表⽰⑤ ⽤“←”表⽰赋值⑥ ⽤缩进表⽰代码块结构,包括while和for循环、if分⽀判断等,块中多条语句⽤⼀对“{}”括起来⑦ 数组形式为“数组名[下界...上界]”,数组元素为“数组名[序号]”⑧ ⼀些函数调⽤或者处理简单任务可以⽤⼀句⾃然语⾔代替
6.5 计算机语言
计算机⽆法识别⾃然语⾔、流程图、伪代码,这些⽅法仅为了帮助⼈们描述、理解算法只有⽤计算机语⾔编写的程序才能被计算机执⾏(当然还要被编译成⽬标程序)⽤计算机语⾔描述算法必须严格遵循所选择的编程语⾔的语法规则
二:程序设计 基础
1.常数
概念:程序运⾏的过程中,其值保持不变的数据数值型:可以进⾏算术运算的数字,例如3.14、1、-3、...字符型:⼜称为字符串,由英⽂字符、中⽂字符和数字字符组成① 字符串⼀般使⽤⼀对双引号括起来,单个字符可以使⽤⼀对单引号② 字符的个数 ⼜称为字符串的⻓度,即字符串中包含的字符的个数字符的位置 从左⾄右,依次编号为1、2、3、...逻辑型⼆元逻辑,即只有true(逻辑真)和false(逻辑假)两个值关系成⽴返回逻辑真,关系不成⽴返回逻辑假
2.变量
概念:程序运⾏的过程中,其值可以改变的数据说明① 在程序中,变量 = 可存放数据的容器② 变量只能保存⼀个数据,后存⼊的数据会替换现有的数据变量当前保存的数据的类型决定变量的数据类型③ 变量必须初始化,即变量必须先写后读操作写:把⼀个数保存到变量中,赋值语句中赋值符号左边的变量和输⼊语句中的变量是在执⾏写操作读:读出变量当前的值,程序中出现的变量不是在执⾏写操作就⼀定是在执⾏读操作
3.运算符
概念运算符是完成数据处理的最基本单位不同类型的数据,使⽤不同类型的运算符进⾏处理除了not是单⽬运算符之外,其它所有的运算符都是双⽬运算符分类数值运算符+(加)、-(减)、*(乘)、/(除)、^(乘⽅)、%(取余)数值运算符⽤于处理数字型的数据,处理的结果也是数值型字符运算符+(连接),相当于Excel或Access中“&”运算符的功能字符运算符⽤于处理字符型的数据(⾄少其中⼀个是字符型),处理的结果也是字符型关系运算符<(小于)、<=(小于等于)、=(等于)、!=(不等于)、>=(⼤于等于)、>(⼤于)关系运算符两端的数据类型必须相同,处理的结果是逻辑型,逻辑真表⽰关系成⽴,逻辑假表⽰关系不成⽴逻辑运算符not(⾮)、and(与)、or(或)逻辑运算符⽤于处理逻辑型的数据,处理的结果也是逻辑型
4.表达式
概念:表达式是由数据、运算符和函数组成的⼀个整体,它是程序中完成数据转换的表达⽅式分析:分析表达式的关键是理解运算符的优先级和结合性优先级:数值运算符 > 字符运算符 > 关系运算符 > 逻辑运算符数值运算符中,乘⽅(^)的优先级最⾼,其次是乘(*)、除(/)、求余(%),最后是加(+)和减(-)所有的关系运算符的优先级都相同逻辑运算符中,逻辑⾮(not)的优先级最⾼,其次是逻辑与(and),最后是逻辑或(or)结合性:当运算符的优先级相同时,决定运算的先后次序的就是结合性右结合 单⽬运算符(not)是右结合,即从右⾄左依次运算,例如not not true = not (not true) = not false = true左结合 所有的双⽬运算符都是左结合,即从左⾄右依次运算,例如4/2*3 = (4/2)*3 = 6常见奇偶性 x%2=0 如果返回true,表⽰x是偶数,否则表⽰x是奇数整除 x%y=0 如果返回true,表⽰x能被y整除,否则表⽰x不能被y整除整数判定 x=floor(x) 如果返回true,表⽰x是整数,否则表⽰x不是整数区间x>a and x<b 如果返回true,表⽰x∈(a,b)区间,否则表⽰x不在(a,b)区间内x>=a and x<b 如果返回true,表⽰x∈[a,b)区间,否则表⽰x不在[a,b)区间内x>a and x<=b 如果返回true,表⽰x∈(a,b]区间,否则表⽰x不在(a,b]区间内x>=a and x<=b 如果返回true,表⽰x∈[a,b]区间,否则表⽰x不在[a,b]区间内否定原则:需要表⽰“否定”逻辑时,最好先表达“肯定”的逻辑,然后使⽤not运算符否定整体例如x能被a和b同时整除 x%a=0 and x%b=0x不能被a和b同时整除 not (x%a=0 and x%b=0)
5.函数
概念函数是⼀个独⽴的功能模块,与运算符⼀样,⽤于完成数据处理伪代码中并未限定可以使⽤的函数的功能和类型,⼀般情况下,这⾥介绍的函数可以直接使⽤说明函数调⽤的⼀般格式为:函数名(参数1, 参数2, ..., 参数n)函数的功能,就是把输⼊数据(参数)转换成对应的输出数据(返回值)常⽤数值函数下取整函数 floor(x) 返回x的整数部分,例如floor(3.999)的结果为3绝对值函数 abs(x) 返回x的绝对值,例如abs(-1)的结果为1平⽅根函数 sqrt(x) 返回x的平⽅根,例如sqrt(4)的结果为2最⼤值函数 max(x,y) 返回x和y中⼤的那个最小值函数 min(x,y) 返回x和y中小的那个字符函数字符串⻓度 length_of(x) 返回字符串x的⻓度,即字符串x中包含的字符的个数,数值型ASCII码to_ascii(x) 返回单个字符x对应的ASCII码值,数值型to_character(x) 返回数值x对应的ASCII码字符,x的值在0~255之间,字符型
6.循环
结构化程序设计的概念最早由荷兰科学家E.W.Dijkstra提出任何程序都可由三种基本结构,即顺序、选择和循环结构组成,程序具有模块化特征,每个程序模块具有唯⼀的⼊口和出口
6.1 顺序结构
![]()
概念:顺序结构是最简单、最常⽤的⼀种结构,计算机按照语句出现的先后次序依次执⾏赋值语句 x ← 表达式:先计算赋值号(←)右边表达式的值,然后将其保存到赋值号左边的变量中⾃增 x ← x + 1 先读出x的值,加1后,写回到x交换① t ← x② x ← y③ y ← t输⼊语句 input x, y, ...运⾏时,⽤⼾输⼊⼀组数据,依次保存到变量x、y、... 中输⼊与赋值都可以完成对变量的写操作,使⽤输⼊语句可以由⽤⼾在程序运⾏时决定变量的值输出语句 print x, y, ...运⾏时,依次将变量x、y、... 中保存的值输出到屏幕上⼀个完整的程序必须包含输出语句,⾄少有⼀个输出
6.2 选择结构
![]()
概念:根据判定的结果(条件成⽴或不成⽴),选择其中⼀条分⽀执⾏,因此⼜称为分⽀结构包括:单分⽀、双分⽀、多分⽀
6.3 循环结构
6.3.1 当型和直到型
概念:计算机与⼈处理问题最⼤的特点,是计算机可以永不疲劳地重复算法所设计的操作,这通过循环结构来实现包括:当型、直到型
6.3.2 循环四要素
6.3.3 循环的分析
说明:分析程序的关键就是分析循环,读懂了循环也就读懂了程序⽅法① 始于变量终于变量,即分析循环时,重点在搞清楚变量的值的每⼀步的变化过程② 从特殊到⼀般,通过观察变量值的变化,总结出变量值的⼀般性的变化规律③ ⼀定要分析“最后⼀次满⾜循环条件”时,循环的执⾏过程④ 对于⼆重循环,固定外层循环变量的值,可以化⼆重循环为单循环
三:程序设计 算法
1.数值
1.1 迭代
概念:迭代法⼜称递推法,是利⽤问题本⾝所具有的某种递推关系求解问题的⼀种⽅法① 从初值出发,归纳出新值与旧值间直到最后值为⽌存在的关系② 从而把⼀个复杂的计算过程转化为简单过程的多次重复,每次重复都从旧值的基础上递推出新值,并由新值替代旧值计数说明:记录在循环的过程中,某个条件满⾜的次数⽅法① 在循环开始前,把某个变量的初始值赋值为0,例如“c←0”② 在循环体中,满⾜条件时,让c的值⾃增1,例如“c←c+1”求和说明:⼜称累加和,即n项求和分类① n已知,求s 例如,s=1+2+3+...+n,当n=100时,求s② n未知,求s 例如,s=1+1/2+1/3+...+1/n,直到最后⼀项小于0.003为⽌,求s③ s已知,求n 例如,s=1+2+3+...+n,当s等于300时,求n⽅法① 初始化:循环开始前,把某个变量的初始值赋值为0,例如“s←0”② 找通项:所谓通项就是能代表累加和中每⼀项的表达式s=1+2+3+...+n,通项为i,i∈[1,n]s=1+1/2+1/3+...+1/n,通项为1/i,i∈[1,n]s=x+x^2/2+x^3/3+...+x^n/n,通项为x^i/i,i∈[1,n]③ 迭代 在循环体中,执⾏“s←s+通项”④ 常数项:单独处理常数项,⼀般可以把常数项作为s的初始值,即“s←常数项”s=1+1+2+3+...+n,通项为i,i∈[1,n],第⼀个1为常数项此时,在循环开始前,可以把s的初始值赋值为1,即“s←1”累乘:⼜称累乘积,即n项求积,例如求k的阶乘:k!=1*2*3*...*k与“求和”的⽅法相似,两点区别① 初始化时,把某个变量的初始值赋值为1,例如“k←1”② 在循环体中,执⾏“k←k*通项”数列概念:⼀组有规律变化的数据常⻅等差数列 形如“1、2、3、...”等⽐数列 形如“1、2、4、8、...”斐波拉契数列 f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2)(当n>=3时)⽅法:找出迭代(递推)公式,有必要时可借助数组,以简化迭代关系其它:包括复息利率、辗转相除、猴⼦摘桃、⾼次⽅程求根等问题
1.2 数论
1.2.1 取数
概念:取出⼀个正整数的每⼀位公式:floor(n/m)%10m=1时,取n的个位数m=10时,取n的⼗位数m=100时,取n的百位数
1.2.2 进制转换
概念:通常是2、8、10、16进制的整数的相互转换⽅法10→R 除R逆序取余R→10 按权展开,乘权求和
1.2.3 素数
概念:素数⼜叫质数,即只能被1和⾃⾝整除的正整数注意1不是素数,2是最小的素数,也是唯⼀的偶素数按定义,当n>=3时,不能被2~n-1中的任何⼀个数整除的数就是素数事实上,数论学家研究发现,只要n不能被2~sqrt(n)之间的数整除,n就是⼀个素数
2.非数值
2.1 枚举
概念枚举法⼜称为穷举法或试凑法,它是⼀种⽐较耗时的算法,需要利⽤计算机快速运算的特点实际上,橘⼦分堆、物不知数、韩信点兵、百钱百鸡、素数判定、数组和字符串的遍历等,都是枚举法的应⽤⽅法① 采⽤搜索的⽅法,根据题⽬的条件确定解的⼤致搜索范围(解空间)② 把解空间内所有可能的情况逐⼀验证,直到所有情况验证完③ 若某个情况符合题⽬的条件,则为本题的⼀个答案;若全部情况验证完后均不符合题⽬的条件,则问题⽆解说明① 枚举法能有效解决问题的关键在于确定搜索的范围和确定解应该满⾜的条件② 枚举法解决问题效率不⾼,因此,为提⾼效率,根据解决问题的情况,应该尽量减少内循环层数或每层循环的次数③ 对某类特定问题,在规模较小的情况下,枚举法往往是⼀个简单有效的⽅法
2.2 数组
2.2.1 基础
初始化概念:数组是⼀组有序的变量,在使⽤前,需要为数组中的每⼀个变量赋初始值,这个操作称为“初始化”包括数组已知,则可以直接使⽤数组,⽆需进⾏初始化数组未知,则在遍历过程中,对数组中的每个变量执⾏输⼊或赋值字符串可以理解为⼀个字符数组,题⽬中已知的字符串可以直接当作⼀个字符数组使⽤说明①组成数组的变量称为数组中的数据元素组成数组的变量的个数称为数组的⻓度或⼤小,记为N②数组中变量的位置称为“下标”数组中的每个变量都可以使⽤“数组名[下标]”的⽅式进⾏引⽤下标如果从0开始,则数组中每个变量的位置可标记为:0、1、2、...、N-1如果从1开始,则数组中每个变量的位置可标记为:1、2、3、...、N③可以把字符串理解为⼀个字符数组,下标通常从1开始遍历假设数组a的⻓度为N,所谓“遍历”,即在⼀个循环中,依次访问a[1]~a[N]遍历的⽅向可以从左⾄右,也就是从a[1]→a[N](或a[0]→a[N-1]),也可以从右⾄左,即从a[N]→a[1](或a[N-1]→a[0])所谓“访问”,即执⾏对变量的“读”或“写”
2.2.2 CEUD
增在数组中的指定位置插⼊⼀个变量,插⼊变量后,数组的⻓度加1插⼊位置右边的所有变量需要依次向右移动1位删在数组中的指定位置删除⼀个变量,删除变量后,数组的⻓度减1删除位置右边的所有变量需要依次向左移动1位改将数组中指定位置的变量的值修改为⽬标值,不影响数组的⻓度如果要把数组中的某个值或某些值修改为⽬标值,可以先使⽤“查”,找到对应的值后,再修改在遍历数组的过程中,实现数组元素的两两交换,也属于“改”的范畴查:找到并返回数组中的某个值或某些值在数组中的位置顺序查找概念:适⽤于“⽆序”数组,查找效率较低,n个数的平均查找次数为(n+1)/2⽅法:从左⾄右或从右⾄左依次遍历数组,将其中的每⼀个值取出与⽬标值⽐较⼆分查找概念⼜叫“折半查找”,要求数组有序,即适⽤于“有序”数组⼆分查找是对数据量很⼤时采⽤的⼀种⾼效查找算法,n个数的平均花费为log2(n)⽅法① 已知待查找数组的下界low、上界high,数组升序有序② 当high>=low时,计算中间项mid=(low+high)/2下取整若high<low,则说明查找不成功,结束查找③ ⽐较待查找的关键字key与中间项a[mid],有以下三种情况Ⅰ key>a[mid],则low←mid+1,即右半部分作为继续查找的区域,返回②Ⅱ key<a[mid],则high←mid-1,即前半部分作为继续查找的区域,返回②Ⅲ key=a[mid],则查找成功,结束查找
2.2.3 进阶
统计:统计数组中满⾜条件的对象的个数、和、平均值等最值概念找到数组中的最⼤值或最小值(或最⼤值、最小值的位置)在数组中,“位置”⽐“值”更重要,知道位置可以直接得到对应的值⽅法:依次⽐较法循环开始前,m ← 1遍历数组,i∈[2,N]如果a[m]<a[i],m←i m表⽰当前已经⽐较过的i个数中最⼤值的位置如果a[m]>a[i],m←i m表⽰当前已经⽐较过的i个数中最小值的位置完成遍历后,m即为数组中最⼤值(最小值)的位置,a[m]是最⼤值(最小值)排序概念把⽆序的数据整理成有序数据称为排序,从小到⼤的顺序叫升序,从⼤到小的顺序叫降序排序算法有很多,考试中可能涉及到的是选择排序和冒泡排序选择排序概念:每次在⽆序数中找到最小数(或最⼤数)的位置,然后存放在⽆序数的第⼀个(或最后⼀个)位置升序每次在⽆序数中找到最小数的位置,然后与⽆序数中第⼀个位置的数交换每次在⽆序数中找到最⼤数的位置,然后与⽆序数中最后⼀个位置的数交换降序每次在⽆序数中找到最小数的位置,然后与⽆序数中最后⼀个位置的数交换每次在⽆序数中找到最⼤数的位置,然后与⽆序数中第⼀个位置的数交换步骤从n个数中找出最小数的下标,⼀轮⽐较结束,最小数与第⼀个数交换位置,通过这⼀轮排序,第1个数已排好在余下的n-1个数中再按①中的⽅法选出最小数的下标,最小数与第2个数交换位置以此类推,重复步骤②,最后构成递增序列冒泡排序概念:冒泡排序在每⼀轮排序时将相邻两个数组元素进⾏⽐较,次序不对时⽴即交换位置,⼀轮⽐较结束时小数上浮,⼤数沉底升序从前往后依次两两⽐较,⼤的后移(如果a[j]>a[j+1],交换a[j]和a[j+1])从后往前依次两两⽐较,小的前移(如果a[j]<a[j-1],交换a[j]和a[j-1])降序从前往后依次两两⽐较,小的后移(如果a[j]<a[j+1],交换a[j]和a[j+1])从后往前依次两两⽐较,⼤的前移(如果a[j]>a[j-1],交换a[j]和a[j-1])说明冒泡排序和选择排序每⼀轮⽐较都仅仅只确定⼀个数在数组中的位置,对n个数,需要进⾏n-1轮⽐较选择排序每⼀轮只交换⼀次,冒泡排序在每⼀轮可能交换多次,因此花费的时间略多⼀点如果在某⼀轮⽐较中,没有发⽣⼀次交换,就说明数组已经有序了
2.3 字符串
基础化整为零:字符串 = 字符数组,对字符串的处理即是对字符数组的处理化零为整:遍历字符数组,通过字符串的连接运算,可以根据题⽬的要求,得到⼀个新的字符串,它通常就是问题的解操作:字符串的所有处理,都可以在化零为整的过程中完成CRUD:将字符串理解为字符数组后,字符串的CRUD(增、删、改、查)操作就类似于数组的CRUD操作截取:⼜称为取⼦串,即取出字符串中的⼀部分图形:⼜称为“字符图形”,⼀般是输出多⾏有规律的字符,组成⼀个特定的图形,这样的图形称为字符图形注意① 可以将字符图形中的⼀⾏看作为⼀个字符串,字符串的末尾带有⼀个换⾏符,由多个这样的字符串组成⼀个完整的字符图形② ⼀般而⾔,每⼀⾏输出的符号的种类和符号的个数是有规律的,因此,求解图形问题的关键在以下3点Ⅰ 总⾏数,即字符图形的总⾏数,记为“n”Ⅱ ⾏号,代表字符图形中的某⼀⾏,记为“i”,i∈[1,n]Ⅲ 每⼀⾏中,每种符号的个数与总⾏数“n”和⾏号“i”之间的数学关系
3.优化
3.1 算法的性能
概念可以⽤算法的复杂性来衡量⼀个算法的效率,也可⽤它来衡量计算机求解问题的难易程度,包含算法的时间复杂性和空间复杂性算法的时间复杂性越⾼,算法的执⾏时间越⻓,反之越短;算法的空间复杂性越⾼,算法所需的存储空间越多,反之越少在算法的复杂性分析中,对时间复杂性的分析考虑得更多时间复杂度概念通常采⽤“渐进时间复杂度”描述数据量的规模n与算法的执⾏时间t之间的函数关系时间复杂度为指数阶O(2^n)的问题,当n值稍⼤时就⽆法计算了,但仍然属于可计算性范畴时间复杂度为O(2^n)或O(n!)这类算法,⽤提⾼计算机的运⾏速度来扩⼤其求解规模,可能性是微乎其微的⼀般来说,通过对算法中循环次数的统计,即可直观地估计出算法的时间复杂性常⻅:O(1) < O(logn) < O(nlogn) < O(n^2) < O(n^3) < ... < O(n^k) < O(2^n) < O(n!) < O(n^n)O(1) 常数阶:问题的规模n和执⾏之间没有关系,例如利⽤求和公式求等差数列之和O(logn) 对数阶:⼆分查找、辗转相除法求最⼤公约数(欧⼏⾥得法)O(n) 线性阶:考试中的多数算法的渐进时间复杂度就是O(n)级的,例如顺序查找O(nlogn) 线性对数阶:快速排序、归并排序等O(n^2) 平⽅阶:冒泡排序、选择排序等O(2^n) 指数阶:例如汉诺塔(hanoi)、旅⾏商(TSP)等空间复杂度概念:通常采⽤“渐进空间复杂度”来描述数据量的规模m与算法的执⾏空间需求之间的函数关系常⻅:O(1) < O(n) < O(n^2)O(1) 常⻅于不需要使⽤数组的算法O(n) 常⻅于使⽤⼀维数组的算法O(n^2) 常⻅于使⽤⼆维数组的算法注意①在很多问题中,时间和空间是⼀个对⽴⾯当时间是⼀个重要因素时,有可能通过增加算法的空间复杂度以减少算法的时间复杂度,即⽤空间换时间当空间是⼀个重要因素时,有时也可以⽤算法的运⾏时间取换取空间②时间复杂度和空间复杂度之间仅仅具有相对性而不具备必然性也就是说,通过牺牲空间不必然能换取时间,通过牺牲时间也不必然能够换取空间
3.2 算法的优化
原则:主要针对算法的时间性能进⾏优化,优化的原则是尽可能减少基本操作的执⾏次数⽅法① 减少循环次数,或减少循环中基本操作的执⾏次数Ⅰ 常数运算放在循环外执⾏,即把不需要反复执⾏的操作放在循环外Ⅱ 减少循环的执⾏次数,例如,把验证n是否是素数的范围从2~n-1缩小到2~sqrt(n),以及在素数的判定或冒泡排序中,使⽤标志位提前结束循环等Ⅲ 需要多次执⾏数组的查找操作时,先对数组排序,就可以使⽤时间复杂度为O(logn)的⼆分查找代替时间复杂度为O(n)的顺序查找② 平衡分⼦结构的层数,即对于多分⽀结构,尽可能构造⼀棵平衡树③ 记忆化(memoization),把复杂计算的结果存储起来,以⽅便多次重复使⽤,是⼀种⽤空间换时间的优化思路
相关文章:
第十二章:算法与程序设计
文章目录: 一:基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二:程序设计 基础 1.常数 …...
计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解
关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…...
一文读懂高频考题!进程、线程、协程最全方位对比剖析
一、基本概念 (一)定义与特征 进程 在计算机科学里,进程是操作系统正在运行的程序的实例,是资源分配的基本单位。就好比每个进程都像一个小王国,它有自己独立的领土,这里的领土就是内存空间、代码块、数据和文件句柄等资源。比如说,你在电脑上同时打开一个文字处理软件…...
Elasticsearch搜索引擎(二)
RestClient 基础 前言一、RestAPI1. 初始化 *RestClient*2. 创建索引库3. 删除索引库4. 判断索引库是否存在 二、RestClient操作文档1.新增文档2.查询文档3. 删除文档4. 修改文档5. 批量导入文档 前言 ES官方提供了各种不同语言的客户端用来操作ES,这些客户端的本质…...
docker 部署 Kafka 单机和集群
一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:docker --version如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux&…...
新增文章分类功能
总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 目录 总说 一、功能实现 1.1 Controller层 1.2 Service层 1.3 Impl层 1.4 Mapper层 1.5 测试接口 二、优化 2.1 2.2 一、…...
[c语言日寄]精英怪:三子棋(tic-tac-toe)3命慢通[附免费源码]
哈喽盆友们,今天带来《c语言》游戏中[三子棋boss]速通教程!我们的目标是一边编写博文,一边快速用c语言实现三子棋游戏。准备好瓜子,我们计时开始! 前期规划 在速通中,我们必须要有清晰的前期规划…...
【Rust自学】12.1. 接收命令行参数
12.1.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数&am…...
Qt应用之MDI(多文档设计)
qt creator 版本6.8.0 MinGW 64bit 由此模块可以扩展成设计一个qt文本编辑器。 界面如下 部分功能展示如下 新建文件 打开文件 mdi模式、级联模式和平铺模式 界面和程序构建过程。 1.如图所需.cpp和.h文件 2.mainwindow.ui和tformdoc.ui界面布局如下 不懂什么是Action如何…...
使用FFmpeg和Python将短视频转换为GIF的使用指南
使用FFmpeg和Python将短视频转换为GIF的使用指南 在数字时代,GIF动图已成为表达情感和分享幽默的重要媒介。无论是社交媒体上的搞笑片段还是创意项目中的视觉效果,GIF都能迅速抓住观众的注意力。然而,很多人不知道如何将短视频转换为GIF。本…...
Qt 各版本选择
嵌入式推荐用 Qt4.8,打包的程序小:Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的 最后支持xp系统的长期支持版本:Qt5.6.3;Qt5.7.0是最后支持xp系统的非长期支持版本。 最后提供mysql数据库插件的版本…...
Web基础-分层解耦
思考:什么是耦合?什么是内聚?软件设计原则是什么? 耦合:衡量软件中各个层 / 各个模块的依赖关联程度。 内聚:软件中各个功能模块内部的功能联系。 软件设计原则:高内聚低耦合。 那我们该如何实现…...
G1原理—8.如何优化G1中的YGC
大纲 1.5千QPS的数据报表系统发生性能抖动的优化(停顿时间太小导致新生代上不去) 2.由于产生大量大对象导致系统吞吐量降低的优化(大对象太多频繁Mixed GC) 3.YGC其他相关参数优化之TLAB参数优化 4.YGC其他相关参数优化之RSet、PLAB和大对象的处理优化 1.5千QPS的数据报表系…...
Hugging Face 的 Trainer类用法
一、使用方法 Hugging Face 的 Trainer 类是一个高级API,用于简化训练、评估和预测的流程。以下是如何使用 Trainer 类的基本步骤: 1. 导入必要的类和函数 首先,您需要导入 Trainer 类以及其他可能需要的类或函数。 from transformers im…...
RabbitMQ前置概念
文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…...
IDEA2023版中TODO的使用
介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…...
(STM32笔记)十二、DMA的基础知识与用法 第二部分
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…...
windows系统“GameInputRedist.dll”文件丢失或错误导致游戏运行异常如何解决?windows系统DLL文件修复方法
GameInputRedist.dll是存放在windows系统中的一个重要dll文件,缺少它可能会造成部分游戏不能正常运行。当你的电脑弹出提示“无法找到GameInputRedist.dll”或“计算机缺少GameInputRedist.dll”等错误问题,请不用担心,我们将深入解析DLL文件…...
使用分割 Mask 和 K-means 聚类获取天空的颜色
引言 在计算机视觉领域,获取天空的颜色是一个常见任务,广泛应用于天气分析、环境感知和图像增强等场景。本篇博客将介绍如何通过已知的天空区域 Mask 提取天空像素,并使用 K-means 聚类分析天空颜色,最终根据颜色占比查表得到主导…...
UML系列之Rational Rose笔记四:时序图(顺序图_序列图)
时序图有很多画法,这基本上能算rose里面要求最乱的一种图了;有些人的需求是BCE模式,这是正常规范点的,有些人就不需要,有些需要用数据库交互,有些不需要;没有一个较为统一的需求;在此…...
nginx反向代理http 和 https(案例)
说明:在香港开了一台虚拟机,主要用于将来自国外访问的80和443代理到大陆IDC机房 (1) 定义80和443的upstream 211.155.82.174 是keepalive中VIP对应的公网IP(在国内访问www.playyx.com解析到211.155.82.174) upstream new_server…...
Dify应用-工作流
目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...
装备制造业:建立项目“四算”管理:以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系
尊敬的各位管理层: 大家好!作为装备制造业的 CFO,我今天要向大家汇报的是如何建立项目“四算”管理,即以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系。在当前市场竞争激烈、成本压力不断增大…...
Centos7将/dev/mapper/centos-home磁盘空间转移到/dev/mapper/centos-root
1、查看存储 df -h文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 126G 0 126G 0% /dev tmpfs 126G 0 126G 0% /dev/shm tmpfs 126G 19M 126G 1% /run tmpfs …...
docker 部署 MantisBT
1. docker 安装MantisBT docker pull vimagick/mantisbt:latest 2.先运行实例,复制配置文件 docker run -p 8084:80 --name mantisbt -d vimagick/mantisbt:latest 3. 复制所需要配置文件到本地路径 docker cp mantisbt:/var/www/html/config/config_inc.php.…...
【Vue - Element 】实现表单输入框的远程搜索功能
需求 表单是一个常见的元素,而在表单中,常常需要用户从大量的数据中选择一个或多个选项。 为了提高用户体验,提供远程搜索功能可以帮助用户快速找到所需的选项,而不是从冗长的下拉列表中手动查找。 以该需求为例,我…...
学习华为熵减:激发组织活力(系列之三)
目录 为什么学习华为? 学习华为什么? 一、势:顺势而为,在风口上猪都会飞起来。 二、道:就是认识和利用规律层面,文化和制度创新就是企业经营之道。 三、法:就是一套价值管理的变革方法论。…...
多种vue前端框架介绍
学如逆水行舟,不进则退。 在现今的软件开发领域,Vue.js凭借其高效、灵活和易于上手的特性,成为了前端开发的热门选择。对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的Vue后台管理系统模板无疑是一个明智之举。 本文…...
C语言重点回顾(持续更新中~)
个人见解,有异议可以留言~ 第一讲:初识C语言 目录 1.编译和链接 2.main函数 3.库函数 4.关键字 5.字符和字符串 6.转义字符 1.编译和链接 初始的C语言源代码是一个文本文件,要想将一个文本文件变成一个执行文件,需要经过编…...
Navicat Premium 原生支持阿里云 PolarDB 数据库
近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…...
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等,对用户体验和应用交互性有直…...
用css和html制作太极图
目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …...
软件测试入门—功能需求分析:以一个旅游管理系统为例
在软件测试的旅程中,功能需求分析是测试人员构建高质量测试用例的基础,它确保软件的各项功能都能按照预期正常运行。接下来,我们将以一个旅游管理系统为例,详细阐述如何进行功能需求分析,帮助大家更清晰地掌握这一重要…...
深度解析Linux中关于操作系统的知识点
操作系统概述与核心概念 任何计算机系统都包含一个基本的程序集合,成为操作系统OS 操作系统是一款进行软硬件管理的软件 操作系统包括: 内核(进程管理,内存管理,驱动管理) 其他程序(例如数据…...
【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…...
分布式ID的实现方案
1. 什么是分布式ID 对于低访问量的系统来说,无需对数据库进行分库分表,单库单表完全可以应对,但是随着系统访问量的上升,单表单库的访问压力逐渐增大,这时候就需要采用分库分表的方案,来缓解压力。 …...
电脑有两张网卡,如何实现同时访问外网和内网?
要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...
Linux 查看内存命令
目录 1. free 2. vmstat 3. top 4. htop 5. /proc/meminfo 1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h -h 选项:以易读的格式(如GB、MB)显示内存大小。…...
无法联网怎么在docker中安装Ribbitmq
如果无法连接互联网,无法在Docker中安装RabbitMQ。但是,您可以使用本地镜像或者手动下载RabbitMQ的Docker镜像并进行安装。 以下是使用本地镜像的步骤: 从可以上网的计算机上拉取RabbitMQ的官方Docker镜像: docker pull rabbitmq:…...
Spring Boot 定时任务搭建及Quartz对比详解
前言: 之前在帮别人搭建定时任务时 被问到为什么不用 Quartz 反而使用 SpringBoot 定时任务 以下是 SpringBoot 定时任务 的使用情况 大家可参考具体情况选择使用 1. 概述: Spring Boot 定时器是基于 Spring Framework 的 Task Scheduling 模块实现的…...
集中式架构vs分布式架构
一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点(服务器或主机)作为系统的核心,负责处理所有用户请求和…...
中国数字安全产业年度报告(2024)
数字安全是指,在全球数字化背景下,合理控制个人、组织、国家在各种活动中面临的数字风险,保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...
Python Wi-Fi密码测试工具
Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点…...
深入探讨DICOM医学影像中的MPPS服务及其具体实现
深入探讨DICOM医学影像中的MPPS服务及其具体实现 1. 引言 在医疗影像的管理和传输过程中,DICOM(数字影像和通信医学)标准发挥着至关重要的作用。除了DICOM影像的存储和传输(如影像存储SCP和影像传输SCP),…...
【Rust自学】12.3. 重构 Pt.1:改善模块化
12.3.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读取…...
Cosmos:英伟达发布世界基础模型,为机器人及自动驾驶开发加速!
1. 简介 在2025年消费电子展(CES)上,NVIDIA发布了全新的Cosmos平台,旨在加速物理人工智能(AI)系统的开发,尤其是自主驾驶车辆和机器人。该平台集成了生成式世界基础模型(WFM&#x…...
【Docker】保姆级 docker 容器部署 MySQL 及 Navicat 远程连接
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. docker 容器部署 MySQL1.1 拉取mysql镜像1.2 启动容器1.3 进入容器1.4 使用 root 用户登录 2. Navicat 连…...
Java IDEA中Gutter Icons图标的含义
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 很多人刚开始用IDEA来学习编程,会发现下面这些图标。 但是…...
Broker收到消息之后如何存储
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...
RuoYi框架上传图片或文件到阿里云OSS详细教程
为了提供一个更加详细的教程,我们将深入探讨每个步骤,并添加一些额外的细节和最佳实践建议。以下是关于如何在Ruoyi框架中集成阿里云OSS实现文件上传功能的详尽指南。 详细教程 环境准备 注册阿里云账号:访问阿里云官网并创建一个账户。创…...