程序算法设计分析

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

分治算法特征:

    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.mzph.cn/pingmian/40005.shtml

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

相关文章

O2OA(翱途)开发平台 V9.1 即将发布,更安全、更高效、更开放

尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们&#xff0c;O2OA(翱途)平台 V9.1将于7月3日正式发布&#xff0c;届时欢迎大家到O2OA官网部署下载及体验最新版本。新版本我们在如下方面做了更大的努力&#xff1a; 1.扩展数据库兼容性和功能范围&#xff1a;在O2OA…

基于Web技术的教育辅助系统设计与实现(SpringBoot MySQL)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

汽车电子工程师入门系列——CAN 规范系列通读

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

使用ps给gif动图抠图

目录 导入gif图片 打开时间轴 选择图片 魔棒抠图-初步抠图 套索抠图-精准抠图 导入gif图片 打开时间轴 因为gif动图实际上多张图片实现的效果&#xff0c;所以如果要给gif抠图&#xff0c;就得挨个给每个时间线的图片抠图 点击窗口->时间轴 选择图片 在时间轴上选择要…

以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!

大家好,我是CodeQi! 项目开发中,Loading 的展示与关闭是非常关键的用户体验设计。 当我们的应用需要发起多个异步请求时,如何有效地管理全局 Loading 状态,保证用户在等待数据加载时能有明确的反馈,这是一个值得深入探讨的问题。 本文将以 Vue 3 项目为例,详细讲解如…

eventloop 事件循环机制 (猜答案)

// eventloop 事件循环机制// console.log(555);setTimeout(() > {console.log(666);})let p new Promise((resolve,reject)>{// 同步执行console.log(111);resolve();});// promise 的回调函数是异步的微任务p.then(v > {console.log(222);}, r > {console.log(r…

STMF4学习笔记(天空星)

前言&#xff1a;本篇笔记参考嘉立创文档&#xff0c;连接放在最后 #RTC相关概念定义 Real-Time Clock 缩写 RTC 翻译 实时时钟&#xff0c;是单片机片内外设的一种&#xff0c;作用于提供准确的时间还有日期&#xff0c;这个外设有独立的电源&#xff0c;当单片机停止供电…

Java同步包装器

通过 Collections.synchronizedList() 方法将一个普通的 ArrayList 包装成了线程安全的 List&#xff1a; import java.util.*;public class SynchronizedWrapperExample {public static void main(String[] args) {// 创建一个非线程安全的 ArrayListList<String> list…

AzureDataFactory Dataverse connector自动处理了分页问题(单次查询上限5000条的限制)

众所周知&#xff0c;在用fetch执行D365的查询时&#xff0c;单次的查询是5000条&#xff0c;如果超过5000条则需要自己处理分页&#xff0c;添加额外的处理逻辑&#xff0c;但在ADF中&#xff0c;Dataverse connector已经自动处理了分页&#xff0c;我们可以很简单的做个POC. …

计算机网络——数据链路层(点对点协议PPP)

点对点协议PPP的概述 对于点对点的链路&#xff0c;目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 它主要应用于两个场景&#xff1a; 用户计算机与ISP之间的链路层协议就是点对点协议 PPP&#xff0c;1999年公布了回以在以太网上运行的PPP协…

【教程】lighttpd配置端口反向代理

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 1、修改配置文件&#xff1a; sudo vim /etc/lighttpd/lighttpd.conf2、先添加mod_proxy&#xff1a; 3、然后添加端口映射&#xff1a; 4、保存&…

耗材分类功能解析:智慧校园的必备利器

在智慧校园的资产管理架构中&#xff0c;耗材分类功能是确保日常运营物资有效管理的关键组成部分&#xff0c;它致力于提高耗材使用的效率和经济性。此功能通过智能化、精细化的管理手段&#xff0c;对校园内各种易耗品进行科学分类与跟踪。 耗材分类功能首先建立在对校园日常运…

C++ 实现QT信号槽

https://github.com/libsigcplusplus/libsigcplusplus #include <iostream>/* 在sigslot.h的420,将&#xff1a; //typedef sender_set::const_iterator const_iterator; 改为&#xff1a; //typedef typename sender_set::const_iterator const_iterator;#include <…

Softing助力工业4.0 | 通过OPC UA和MQTT访问SINUMERIK 840D CNC控制器数据

Softing uaGate 840D是用于采集西门子SINUMERIK 840D SL/PL CNC控制器数据的物联网网关&#xff0c;支持OPC UA服务器和MQTT发布功能。该网关提供对SINUMERIK 840D CNC控制器机床数据的访问&#xff0c;支持读取、处理重要的主轴和从轴数据&#xff0c;例如扭矩和功耗&#xff…

C++——stack和queue类用法指南

一、stack的介绍和使用 1.1 stack的介绍 1、stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行插入与提取操作 2、stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&am…

Halcon OCR字符识别(极坐标转换,字符识别)

Halcon OCR字符识别&#xff08;极坐标转换&#xff0c;字符识别&#xff09; 代码 * 1.加载图片 *************************************************** dev_close_window () read_image (Image, ./img) get_image_size (Image, Width, Height) dev_get_window (WindowHandle…

Vue移动端地图App:van-uploader导致的卡顿问题

问题描述 基于Vue3+Vant IU 4开发的移动端地图App,在进行地图点位上报、上报记录查看过程中,出现App卡顿、甚至闪退的问题,进行问题定位之后,发现是van-uploader组件导致的问题。 van-uploader文件上传组件 van-uploader组件用于将本地的图片或文件上传至服务器,并在上传…

智慧课堂基于YOLOv8的学生上课行为检测

数据集 学生上课行为检测&#xff0c;我们直接使用公开数据集 共三类行为&#xff1a;举手、读书、写字 数据集已经按照YOLO格式配置好&#xff0c;数据内容如下 模型训练 ​ 采用YOLOv8模型进行训练&#xff0c;官方代码 首先是划分数据集&#xff0c;分为训练集、验证&a…

QT创建地理信息shp文件编辑器shp_editor

空闲之余创建一个简单的矢量shp文件编辑器&#xff0c;加深对shp文件的理解。 一、启动程序 二、打开shp文件 三、显示shp文件的几何图形 四、双击右边表格中的feature&#xff0c;主窗体显示选中feature的各个节点。 五、鼠标在主窗体中选中feature的节点&#xff0c;按鼠标左…

程序员AI提效案例:统计B站课程耗时情况

文章目录 一&#xff0c;时长统计需求二&#xff0c;一波三折三&#xff0c;终极方案 AIJava总结 今天为了写一篇博客&#xff0c;这篇博客介绍了B站的一个Java项目&#xff0c;这个项目分为三个阶段&#xff1a; 初级篇高级篇运维篇 一&#xff0c;时长统计需求 我想根据每个…