程序算法设计分析

news2024/11/18 11:34:30

动态规划和分治、贪心相比有什么区别?各自的优缺点?

分治算法特征:

    1)规模如果很小,则很容易解决。//一般问题都能满足

    2)大问题可以分为若干规模小的相同问题。//前提

    3)利用子问题的解,可以合并成该问题的解。//关键

    4)分解出的各个子问题相互独立,子问题不再包含公共子问题。 //效率高低

【一】动态规划:

       依赖:依赖于有待做出的最优选择

       实质:就是分治思想和解决冗余。

       自底向上(每一步,根据策略得到一个更小规模的问题。最后解决最小规模的问题。得到整个问题最优解)

         特征:动态规划任何一个i+1阶段都仅仅依赖 i 阶段做出的选择。而与i之前的选择无关。但是动态规划不仅求出了当前状态最优值,而且同时求出了到中间状态的最优值。局部最优解

          缺点:空间需求大。

【二】贪心算法:

       依赖:依赖于当前已经做出的所有选择。

       自顶向下(就是每一步,根据策略得到一个当前最优解。传递到下一步,从而保证每一步都是选择当前最优的。最后得到结果)

【三】分治算法:

        实质:递归求解

        缺点:如果子问题不独立,需要重复求公共子问题
 

指针和引用的区别★★★★★

相同点:

都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。

不同点:

指针是一个实体,而引用仅是个别名;

引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”,指针可以“见异思迁”;

引用没有const,指针有const,const的指针不可变;

引用不能为空,指针可以为空;

●“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小;

指针和引用的自增(++)运算意义不一样;

引用是类型安全的,而指针不是 (引用比指针多了类型检查

浅拷贝和深拷贝★★★

基本类型赋值时,赋的是数据(所以,不存在深拷贝和浅拷贝的问题)。

引用类型赋值时,赋的值地址(就是引用类型变量在内存中保存的内容

 如:

var arr1 = new Array(12,23,34)

Var arr2 = arr1;//这就是一个最简单的浅拷贝

如果要改变arr2所引用的数据:arr2[0]=100时,那么arr1[0]的值也是100。

        原因就是 arr1和arr2引用了同一块内存区域(以上的第二点中有体现)。

        

这是最简单的浅拷贝,因为,只是把arr1的地址拷贝的一份给了arr2,并没有把arr1的数据拷贝一份。所以,拷贝的深度不够
                       

深拷贝_如果属性是数组等非键值对的对象

      就得单独处理:要么给数组增加一个自我复制的函数(建议这样做),要么单独判断。

深拷贝应该自己再形成一个。

原文链接:https://blog.csdn.net/jiang7701037/article/details/98738487

程序的编译执行过程★★★★★★

  1. 第一步,预处理. 这一步处理 头文件、条件编译指令和宏定义。
  2. 第二步,编译. 将第一步产生的文件连同其他源文件一起编译成汇编代码。
  3. 第三步,汇编。将第二步产生的汇编源码转换为 object file.
  4. 第四步,链接. 将第三步产生的一些object file 链接成一个可执行的文件。 

*知道c++中的符号重载吗?★★★

         C++的预定义运算符的操作对象是基本的内置数据类型,对自定义数据类型,结构体或者类无法操作。符号重载可以自定义运算符的操作对象和运算规则,满足对自定义数据类型的需求。

         实质上,运算符重载就是函数重载,语法形式如下:

<返回类型说明符> operator <运算符符号>(<参数表>)

{

     <函数体>

}

函数重载的话,需要操作对象中至少有一个是用户自定义类型,避免导致重载之后出现歧义。出自之外,不能违背原本的语法规则,不能修改运算符的优先级,不能创建新的运算符等等,总之不能使得原有的运算规则出现错乱。

参考CSDNhttps://blog.csdn.net/lishuzhai/article/details/50781753

C++中如何实现多态?★★★

有一对继承关系的两个类,这两个类里面都有一个函数且名字、参数、返回值均相同,然后我们通过调用函数来实现不同类对象完成不同的事件

多态的前提:

1. 调用函数的对象必须是指针或者引用。

2. 被调用的函数必须是虚函数,且完成了虚函数的重写

https://blog.csdn.net/qq_39412582/article/details/81628254?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164171428616780265456117%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=164171428616780265456117&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~hot_rank-3-81628254.nonecase&utm_term=C%2B%2B%E4%B8%AD%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%80%81&spm=1018.2226.3001.4450

*java和c++和c的区别(准备下英文)★★★★★★

参考资料:https://blog.csdn.net/weixin_42482896/article/details/93380006

百度翻译+人工润色:

1. Java不能在类之外的地方定义全局变量,只能在一个类中定义静态变量来实现一个全局变量。

C/C++可以直接在类之外定义全局变量。

Java can't define global variables outside a class, it can only define static variables in a class as a global variable.

2. Java不支持C/C++goto语句,而是通过trycatch来代替C/C++goto来处理异常时控制。

Java doesn't support "goto" statements of C/C++, but uses try/catch syntax instead of "goto" for exception control.

3. C/C++可以通过指针进行内存地址操作,例如通过指针对某内存地址进行显式类型转换,而这种操作访问私有成员破坏了安全性。

Java对指针进行完全的控制,不能在程序中进行任何指针操作,Java中的数组作为类实现,解决了关于数组的很多C/C++难以检查的错误。

C/C++ can operate memory address through pointer. For Example, C/C++ makes explicitly conversion to a memory address by pointer, which destroys the security of the program because it accesses private members. Java Controls pointer completely, and can not operate any pointer in the program. The array in Java is implemented as a class, which solves many errors about array which are difficult to check in c/c++.

4. C语言中通过mallocfree函数分配和释放内存;C++中可以通过newdelete进行内存的分配和释放。在Java通过new运算符分配内存,进行对象实例化,而分配内存时随着程序运行动态分配,Java能够进行自动管理和自动垃圾回收,防止内存资源产生的操作错误和浪费。

In C language, malloc function and free function are used to allocate and release memory; In C + +, memory can be allocated and released by new and delete keywords. In Java, the new operator is used to allocate memory and instantiate objects, and the allocated memory is dynamically allocated with the running of the program. Java can automatically manage memory and recycle garbage, so as to prevent memory operation errors and memory waste.

5. C/C++对于不同的平台,数据类型的长度不同,代码不可移植。Java对数据类型总是分配固定长度位数,保证平台无关性,可移植性好。

The length of data type of C/C++ is different in different platforms, so the code is not portable. Java always allocates a fixed number of bits to data type to ensure platform independence.

6. C++可以通过指针进行任意类型的转换,Java在进行类型转换时会进行类型相容性检查,防止不安全的转换。

C++ can do any type conversion by pointer. Java will check the type compatibility to prevent unsafe conversion.

7. C/C++中用头文件声明类的原型及全局变量、库函数,在大的系统中难以维护这些文件。Java不支持头文件,所有类成员的类型和访问权限都封装在一个类中,运行时系统对访问会进行控制防止对私有成员的操作;导入其他类要使用import语句。

In C/C++, header files are used to declare class prototypes, global variables and library functions, which are diffcult to maintain in large systems. Java does not support header files. The types and access rights of all class members are encapsulated in one class. When the program is running, the system will control the access to prevent the operation of private members.

8. C++中的结构体和联合体所有成员都是共有的,这有一定的安全问题。Java中没有结构体和联合体,一切内容都封装在类中。

All members of C++ structure and union are public, so there are some security problems. There is no structure or union in Java, everything is encapsulated in class.

9. C++支持宏定义,Java不支持宏定义,而是通过final来声明一个常量,实现宏定义中常量的定义。

C + + supports macro definition. Java does not support macro definition, but declares a constant through the final keyword to realize the definition of constant equivalent to macro definition.

  1. Java的垃圾回收算法★★★
  2. Jvm的内存管理★★★
  3. 全局变量是好是坏?★★

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

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

相关文章

订单服务-提交订单业务立即购买业务

文章目录 1、提交订单 业务2、在 OrderController 创建 submitOrder 方法3、 在 OrderServiceImpl 中实现 submitOrder 方法4、根据id查询sku详情&#xff08;service-product"&#xff09;5、查询用户地址保存到订单项中&#xff08;service-user&#xff09;6、删除购物…

从.mat文件中导入数据到simulink进行FFT分析

1. 在matlab中准备数据 .mat 文件中包含时间向量和需要分析的数据 load(fcssiabc061302.mat);提取时间和需要分析的数据 time fcssiabc061302.X.Data; % 时间向量 signal fcssiabc061302.Y(1).Data; % A相电流数据 将数据转换为“structure with time”格式…

Redis(十八) 分布式锁

文章目录 前言什么是分布式锁分布式锁的基本实现引入过期时间引入校验 id引入 lua 脚本引入 watch dog&#xff08;看门狗&#xff09;引入 Redlock 算法 前言 在使用 redis 作为中间件的时候&#xff0c;如果使用单机部署的话&#xff0c;如果这个机器故障的话&#xff0c;那…

优先级队列(堆)学的好,头发掉的少(Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

取证与数据恢复:冷系统分析,实时系统分析与镜像分析之间的过渡办法

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 ElcomSoft 系列取证软件 ElcomSoft 系列取证软件支持从计算机和移动设备进行数据提取、解锁文档、解密压缩文件、破解加密容器、查看和分析证据。 计算机和手机取证的完整集合硬件加速解密最多支持10,000计…

arduino IDE 处于read only editor模式

当我们浏览一些arduino的例子的时候&#xff0c;有时候想修改这些例子。但是这些例子即使另存到自己的文件目录下&#xff0c;仍然不能修改&#xff0c;提示处于read only 模式。 网上有一些什么说法&#xff0c;说要设置什么之类的&#xff0c;当我们点开之后&#xff0c;好像…

13-4 GPT-5:博士级AI,人工智能的新时代

图片来源&#xff1a;AI Disruptive 人工智能世界正在迅速发展&#xff0c;新的创新和突破层出不穷。在本文中&#xff0c;我们将深入探讨最新的进展&#xff0c;从即将推出的 GPT-5 模型到 Apple 和 Meta 之间可能的合作。 GPT-5&#xff1a;博士级别的人工智能 虽然尚未正…

Windows Server 2008近源应急OS-1

前景需要&#xff1a;小王从某安全大厂被优化掉后&#xff0c;来到了某私立小学当起了计算机老师。某一天上课的时候&#xff0c;发现鼠标在自己动弹&#xff0c;又发现除了某台电脑&#xff0c;其他电脑连不上网络。感觉肯定有学生捣乱&#xff0c;于是开启了应急。 我们需要…

微信小程序 typescript 开发日历界面

1.界面代码 <view class"o-calendar"><view class"o-calendar-container" ><view class"o-calendar-titlebar"><view class"o-left_arrow" bind:tap"prevMonth">《</view>{{year}}年{{month…

py黑帽子学习笔记_burp

配置burp kali虚机默认装好了社区版burp和java&#xff0c;其他os需要手动装 burp是用java&#xff0c;还得下载一个jython包&#xff0c;供burp用 配apt国内源&#xff0c;然后apt install jython --download-only&#xff0c;会只下载包而不安装&#xff0c;下载的目录搜一…

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍 边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中&#xff0c;边缘点通常标志着不同表面或物体的分界&#xff0c;或者是物体表面上的不规则性&#xff0c;如裂缝、棱角、突起等。点云边缘检测的作用非常重要&#xff0c;最常见是进行特征点…

Transformation(转换)开发-switch/case组件

一、switch/case组件-条件判断 体育老师要做一件非常重要的事情&#xff1a;判断学生是男孩还是女孩、或者是蜘蛛&#xff0c;然后让他们各自到指定的队伍中 体育老师做的事情&#xff0c;我们同样也会在Kettle中会经常用来。在Kettle中&#xff0c;switch/case组件可以来做类似…

私有云统一多云管理平台主要服务内容

私有云统一多云管理平台&#xff0c;作为企业IT架构现代化的关键组成部分&#xff0c;旨在为企业提供高效、灵活、安全的云计算资源管理解决方案。这类平台通过整合和优化不同云环境(包括私有云、公有云、混合云)的管理&#xff0c;帮助企业打破云孤岛&#xff0c;实现资源的统…

守护创新之魂:源代码防泄漏的终极策略

在信息化快速发展的今天&#xff0c;企业的核心机密数据&#xff0c;尤其是源代码&#xff0c;成为了企业竞争力的关键所在。然而&#xff0c;源代码的泄露风险也随之增加&#xff0c;给企业的安全和发展带来了巨大威胁。在这样的背景下&#xff0c;SDC沙盒作为一种创新的源代码…

【JAVA入门】Day12 - 权限修饰符

【JAVA入门】Day12 - 权限修饰符 文章目录 【JAVA入门】Day12 - 权限修饰符一、private二、空着不写三、protected四、public五、权限修饰符的使用规则 权限修饰符是用来控制一个成员能够被访问的范围的。 权限修饰符可以修饰成员变量、方法、构造方法、内部类。 publ…

解析Kotlin中的内联函数,inline、noinline、crossinline【笔记摘要】

用编译时常量的概念&#xff0c;引出本文要讲内联函数inline&#xff1a; 1.编译时常量 Java的编译时常量 Compile-time Constant 它有四个要求&#xff1a;1.这个变量需要是 final 的  2.类型只能是字符串或者基本类型  3.这个变量需要在声明的时候就赋值  4.等号右边…

华为路由器静态路由配置(eNSP模拟实验)

实验目标 如图下所示&#xff0c;让PC1ping通PC2 具体操作 配置PC设备ip 先配置PC1的ip、掩码、网关。PC2也做这样的配置 配置路由器ip 配置G0/0/0的ip信息 #进入系统 <Huawei>system-view #进入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #设置接口的ip和掩码 […

springboot 自定义的全局捕获异常失效

背景&#xff1a;springbootspringcloud 分布式微服务。 问题&#xff1a;公共模块在使用RestControllerAdvice全局捕获异常时&#xff0c;捕获不到子服务抛出的相应异常 首先看一下全局异常组件有么有被扫描到 如何查看&#xff0c;很简单只需要写一段类加载打印代码&#x…

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向&#xff08;弧矢和子午方向&#xff09;的傍轴光线追踪确定近轴图像平面的Z坐标&#xff0c;并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向&#xff08;YZ&#xff09;平面测量的距离…

解决pip安装时的“SyntaxError: invalid syntax”错误

项目场景&#xff1a; 项目中有新的成员加入时&#xff0c;第一步就是安装开发环境&#xff0c;然而往往同样的机器、同样的配置&#xff0c;我们却总能遇到各种各样不同的问题。 今天分享一个简单的操作问题。 问题描述 项目用到pandas&#xff0c;安装pandas时遇到Syntax…