- 博客(101)
- 收藏
- 关注
原创 01背包问题的动态规划算法和回溯算法对比研究
摘 要: 本文介绍了01背包问题和动态规划已经回溯两种算法。并使用两种方法对01背包问题进行求解。关键词: 背包问题; 动态规划算法;回溯算法 目录1 引言2 动态规划算法2.1 动态规划算法思想介绍2.2 动态规划算法求解的基本步骤2.2.1 确定状态表示2.2.2写状态转移方程2.2.3 初始化状态表2.2.4 确定状态表的填写顺序2.2.5确定返回值2.3 算法设计2.4算法实现2.5 案例分析3.回溯算法3.1回溯算法思想介绍3.2回溯算法解题步骤3.
2024-07-18 20:50:08 956
原创 动态规划算法解决01背包问题的优化及分析
观察发现,optp[i][j]只 与optp[i-1][j]和optp[i-1][J—weight[i]]有关,与 optp[k][1](k=1,2,……,i一2,i+l,……由于我们的dp[i][j]的值由optp[i-1][j]和dp[i-1][j-Vi]两个位置的状态值确定,两点在d[x][y]的上方或者忧伤,所以填表顺序从上往下填写。(有三件物品),三个物品的重量为{20,15,10},三个物品的价值为{20,30,25},对于一个最大承重为25的背包,求包中物品的组合最大的价值是多少?
2024-07-18 20:41:16 1268
原创 【C++初阶】基于范围的for循环&&指针空值nullptr
我们一般写for循环是这样的方式:在c++11中引入了范围for的概念,先不说范围for是什么样,我们先来看一下范围for的使用效果:范围for:对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因 此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范 围内用于迭代的变量,第二部分则表示被迭代的范围。
2024-05-27 15:20:01 467 2
原创 【C++初阶】auto关键字
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的 是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一 个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。补充:typid(),用于打印变量的类型编写如下代码:所以结论:auto关键字可以自动推导类型。
2024-05-27 13:38:38 450
原创 【C++初阶】宏与内联函数
inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建 议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不 是递归、且频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。在生成可执行程序的过程中,编译的第一步就是预处理,预处理的步骤诶头文件的展开,宏的替换,条件编译,去掉注释。以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数可以提升程序运行的效率。
2024-05-27 11:02:03 806
原创 关于AIGC发展历程的研究报告(原创文章)
2022年,Chat GPT和Stable Diffusion展现了AIGC强大的技术实力,拉开了AIGC时代的帷幕。2023年,GPT-4、Midjourney V5等又掀起了人工智能的热潮,2024年2月15日(美国当地时间)正式对外发布的Sora又一次通过令人惊喜的效果证明,AIGC已经成为了毋庸置疑的科技趋势。AIGC作为新一代人工智能技术的重要分支,对我们的生活以及未来生活的展望已经产生了深远的影响。
2024-05-05 18:29:33 2848 9
原创 【Linux】进程的控制②之进程等待与进程替换
目前我们的程序只能执行自己进程的代码。如果我们创建的子进程想要执行其他程序的代码的话,可以通过程序替换来实现。原理如下图:如果现在要执行另外一个程序,将新的程序的代码和数据直接在内存中替换老的代码和数据,栈区和堆区该初始化的初始化,该清空的就清空,页表要重新映射就重新映射,地址空间的范围大小该调整就调整掉。此时pcb被cpu调度,cpu不关心执行的是那个程序,只要有代码跑就行。这个时候cpu会执行新的程序,这就叫做程序替换。
2024-05-05 18:19:15 1212
原创 【Linux】进程的控制①之进程创建与进程退出
enum{open_err,malloc_err可以这样来使用:defult :那么当我们要使用的时候直接调用这个接口就好。结论:mian函数return返回时,表示进程已经退出,return后跟的数字是进程退出码,可以自行设置退出码的字符串意义。
2024-04-28 21:01:11 1730 3
原创 【编程Tool】小熊猫C/C++的安装使用及配置保姆级教程
学校大多数用的都是Dev C++软件,因为比较,一些竞赛使用的也是Dev C++,但是Dev C++在早期维护了之后,目前已经不再继续维护了。小熊猫C/C++是提供了比旧版Dev-C++更完善的功能,且适合C/C++初学者使用。
2024-04-23 20:17:09 11386 18
原创 【Linux】进程的程序地址空间①
程序运行时,每个进程都要有自己的pcb,都会有自己的进程地址空间,对于这个进程的数据肯定是存放在物理内存中的,但是,我们的进程运行时如何拿到或者访问到这块内存,拿到数据,我们在操作系统内部还存在一种映射关系,大家可以理解为一张表,这个映射表,会将虚拟地址和物理地址建立一个映射。这是一个进程,子进程也是会拥有同样的配置。同样的子进程将相同的映射关系也继承了下来:所以子进程指向同一个物理地址,所以虚拟地址打印也会是一样的。
2024-04-22 15:22:59 1732 11
原创 【编程Tool】VS code安装与使用配置保姆级教程
Visual Studio Code(简称“VS Code” )是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且可用于Windows,macOS和Linux。
2024-04-21 23:05:02 2316 11
原创 【编程TOOL】VC++6.0下载安装配置使用保姆式教程
Visual C++ 6.0简称VC或者VC6.0,是微软1998年推出的一款C/C++ IDE,界面友好,调试功能强大。VC6.0是一款革命性的产品,非常经典,至今仍然有很多企业和个人在使用,很多高校也将VC6.0作为C语言的教学基础,作为上机实验的工具。
2024-04-17 23:01:21 7721 30
原创 【Linux】环境变量(main函数三个参数的用途揭秘)
环境变量是系统内置的,具有特殊用途的变量。接下来bash定义了一个字符数组,用户输入指令,bash将指令看做一个字符或者字符串存入数组中,看似我们输入以空格分割了,实际上我们输入的是一个大字符串,这个字符串被bash读到,bash按照空格作为分隔符,将其转换为小的字符串,将字符串一变多,我们目前就认为bash为了保存这些小串给我们维护了一个char* 类型的数组,以NULL结尾,定义一个count来记录小串的数量,接下来执行程序,将数组和count按照一定的方式(这里不做探讨)传给我们的main函数。
2024-04-17 22:35:08 1798 2
原创 【编程Tool】DevC++的安装配置及使用保姆级教程
Dev-C++(或者叫做Dev-Cpp)是Windows环境下的一个轻量级C/C++集成开发环境(IDE)。它是一款自由软件,遵守GPL许可协议分发源代码。Dev-C++集合了功能强大的源码编辑器、MingW64/TDM-GCC编译器、GDB调试器和AStyle格式整理器等众多自由软件,适合于在教学中供C/C++语言初学者使用,也适合于非商业级普通开发者使用。一般蓝桥杯等比赛采用的都是DevC编译器。
2024-04-16 22:41:40 4327 16
原创 【编程Tool】Visual studio 2022社区免费版本的下载安装及使用
推荐下载Community版本主要是其免费提供了全功能的IDE,完全足够普通开发者的学习和使用。双击这个文件。
2024-04-15 20:49:58 3654 22
原创 【Linux】进程的优先级及linux下进程的调度于切换
优先级决定了进程享受资源的前后,如果进程的优先级很小,调度器cpu在短时间内较大概率会频繁的调度这个进程,导致调度不太平衡,导致优先级高的优先得到资源,后续还有源源不断的进程产生,最后会导致常规进程很难得到cpu资源,意味着这个进程很长时间不被调度,作为一个要运行的进程,变得很卡顿,而其他优先级高的进程很快就跑完了,所以,这种情况称之为“进程饥饿”,就像去打饭长由于被插队长时间打不到饭。为什么需要运行队列,cpu只有一个。当前进程的信息都在寄存器保存,如果进程运行时间片到了,进程切换时,将临时数据带走,
2024-04-15 20:35:30 1032 2
原创 【算法】回溯:与递归,dfs的同质与分别,剪枝与恢复现场的详细理解,n皇后的回溯解法及算法复杂度分析。
本文先带大家了解什么是回溯:走不通回头,然后给出了第一个回溯算法的定义,然后给大家区分了递归和深度搜素和回溯的区别,然后引出了对回溯的剪枝和恢复现场的讲解,接着通过二叉树路径这道简单题目让大家对以上概念得到运用和更深入理解,最后使用递归解决了n皇后的问题,分析了时间复杂度和空间复杂度。创作不易,希望大家多多指教,如果觉得今天讲解的有学到东西,可以留下一个三连,持续关注后续的文章。
2024-04-14 22:17:58 2293 55
原创 【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②
今天的主要内容是进程的排队,进程状态在操作系统学科层次的理解和linux操作系统下的观察。扩展了很多内容,补充了僵尸进程和孤儿进程,后续进程的优先级和进程相关内容,欢迎大家关注。创作不易,如果大家觉得有所收获,欢迎关注,一起交流互进。
2024-04-09 17:15:25 3514 48
原创 【Linux】进程学习① (进程的PCB(task_struct)&&进程的标识符详解&&进程的创建fork函数)
今天的主要内容是进程、进程的pcB,以及linux下进程pcb-task_struct中众多属性的第一个进程的标识符。扩展了很多内容,后续更新进程的状态,僵尸进程、孤儿进程的讲解,欢迎大家关注。创作不易,如果大家觉得有所收获,欢迎关注,一起交流互进。
2024-04-07 19:02:12 2211 18
原创 【C++】引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。简单说引用就是取别名,比如孙悟空,齐天大圣、弼马温、猴子、美猴王都是说的孙悟空一样。
2024-04-06 20:10:51 881 7
原创 【C++】缺省参数和函数重载
因为害怕函数声明的时候是一个参数值,函数定义的时候又是一个参数值,没有办法有一个标准但是也不能定义是缺省参数,函数声明没有, 所以如果声明和定义分离,只能在声明地方给缺省参数。因为有些地方只用到函数的声明,所以以声明为主,然后定义可以不用给。缺省值一般是常量或者全局变量,但是一般是变量 ,c语言不支持缺省。
2024-04-06 13:49:42 814 3
原创 【Linux】-进程知识铺垫①计算机硬件的组织:冯诺依曼体系结构详细解读②关于操作系统对软硬件及用户的意义
最简单的计算机模型:输入--计算--输出计算机有各种各样的硬件(显卡、硬盘、键盘等)这些能够看到 和软件(看不到)的组成,而所有的硬件单元都要由一定的体系结构组织起来才能形成我们的计算机,软件也是由一定的软件结构组织起来。计算机有很多很多的组织方式也就是体系结构,被保留的叫做冯诺依曼体系结构。历史:在计算机诞生之前,人们在计算的精度和数量上出现了瓶颈,对于计算机这样的机器的需求就十分强烈,冯·诺依曼的逻辑和计算机思想指导他设计并制造出历史上的第一台通用电子计算机。他的计算机理论主要受自身数学基础影响,且具有
2024-04-04 22:54:05 1562 1
原创 【C+ +】第一个C+ + 项目的创建及namespace命名空间解释&C++中的输入输出
二者不同的点:头文件不同这个可以理解因为可能包含了我们输出输出函数的不同要包含不同的头文件,突兀的是这一行代码:这个是什么含义呢?有什么用是干什么的?这是我们进入c++的第一个问题。c++语言是c语言生长起来的, 兼容百分之九十的c语言,所以我们在c++中仍然可以使用c的代码:只是一些细节不兼容。c++是面向对象的语言,具有泛型,弥补c语言的不足,那么这个就是为了弥补c语言中一些命名冲突而诞生的我们称为命名空间。接下来我们就详细聊一下这个命名空间。2.命名空间2.1 C++关键字。
2024-04-03 19:01:57 1129 2
原创 【C+ +初阶】前言篇章---C+ +的广袤
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机 界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言 应运而生。 1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一 种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而 产生的,它既
2024-04-02 23:08:27 1454 1
原创 【Linux】调试器-gdb使用(指令调试常用大全,实用性高!!)
那我们就不得不提及那个开拓时代,和那段在编程世界的神话;与“阿兰·图灵、史蒂夫·乔布斯、比尔·盖茨”等一同入选“IT界十大最有远见的人才”的唯一一位女性——格蕾丝·赫柏大家可以点击链接了解她的故事,现在我们来看一下她是如何发现并命名世界上第一个“BUG”的。赫柏从海军学校毕业后,因为出色的数学背景,被分配到美国船舶局位于哈佛大学的战时科研中心。彼时,军方正在开展世界第一台大型数字计算机的研究项目——马克一号。赫柏被任命为著名计算机专家霍德艾肯博士的助手,成为这个项目的第三名程序员。
2024-04-01 13:19:50 1163 3
原创 【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
2024-03-31 20:56:25 1932 1
原创 Linux项目自动化构建工具-make/ makefile及其应用:多文件编写第一个linux程序:进度条(懒人学习必备博文!!!)
make是一个命令,makefile是一个文件(主旨)而makefile是需要在当前工作目录下需要我们自己创建的一个文件。保存的是依赖关系和依赖方法。
2024-03-29 14:09:04 1044
原创 【Linux】 gcc(linux下的编译器)程序的编译和链接详解
gcc是linux下的一款编译器,可以在指令级别将代码编译形成可执行程序格式gcc [选项要编译的文件选项] [目标文件】我们手动编写一个简单的程序使用指令gcc 文件名进行编译也可以在底行模式中直接编译生成一个a.out的可执行程序./a.out运行这个程序这是gcc的一个快速认识关于gcc其他的指令-E只激活预处理这个不生成文件你需要把它重定向到一个输出文件里面-S编译到汇编语言不进行汇编和链接-c编译到目标代码-o文件输出到 文件。
2024-03-28 14:12:47 2209
原创 【数据结构和算法初阶(c语言)】二叉树系列oj题目图文详解
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回true;否则返回false。解题思路:先判断根和它的左右子树相等不相等,都相等再次判断左右子树和他们的孩子是否相等。(递归的思想)先判断根再判断左右子树属于前序遍历。题解代码://如果根为空,这里根据示例1可以返回空//根节点不为空了,现在就来看一下左右孩子的值等不等于根//首先要判断左右孩子有没有,然后再判断两个值是否相等,左子树值与根相等,右子树值与根相等,判定三个节点的值相等。
2024-03-27 23:34:51 965
原创 【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法
以上就是关于vim的使用及配置,有些东西不是很具体,大家可以多做扩展。
2024-03-26 16:29:11 4258
原创 【数据结构和算法初阶(C语言)】二叉树的链式结构--前、中、后序遍历实现详解,节点数目计算及oj题目详解---二叉树学习日记③
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存储地址。链式结构又分为二叉链和三叉链。
2024-03-25 23:23:50 1372
原创 【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二叉树学习日记②12
底层是一个顺序表//底层是一个顺序表,但是数据不是随便存储,逻辑结构是二叉树int size;}HP;//先为i堆空间申请两个节点exit(-1);以上就是本期的所有内容,知识含量蛮多,大家可以配合解释和原码运行理解。
2024-03-20 23:57:18 1688
原创 【数据结构和算法初阶(C语言)】二叉树学习日记①--树的概念/二叉树的概念、知识和存储结构
以上就是这篇开启二叉树数据结构的铺垫内容,后续有完全二叉树顺序结构实现--堆结构的详解以及二叉树链式存储实现和应用的详解。本篇文章讲述了树的概念和一些数据特点,以及树的分类,二叉树的一些结构概念和数据特点,是一篇先作铺垫。
2024-03-17 11:30:11 1215
原创 【C语言】函数栈帧---函数的创建于销毁过程剖析(一览无遗)
学习这么久以来,可能有很多疑问:局部变量怎么创建的?为什么局部变量的值是随机的?函数是怎么传参的?传参的顺序是怎么样的?形参和实参是什么样的关系?函数调用是怎么做的?函数调用结束后是怎么返回的?那么本篇博文就来一一讲解一下。环境:vs2021,大家也可以使用更低版本的编译器更容易观察出现象。(推荐vc6.0)在不同的编译器下面,函数调用的过程中栈帧的创建是稍有差异的,大体逻辑是一样的具体差异的细节取决于编译器的实现。
2024-03-16 15:34:21 809
原创 【数据结构和算法初阶(C语言)】二叉树铺垫--栈帧的创建与销毁--细节全解
将rbp和rid出栈(这里由于我重新启动了一次所以数据不一样,不过还是可以看到rbp和rsp之间相差20.回到了起点,原先的空间被释放了)刚进入,我们的rbp和rsp在为我们的调用main函数的函数维护栈帧,进入main函数过后。return后,将rbp+E8h给rsp,相当于销毁了add的栈帧。寄存器中有eax/ebx/ecx/ edx /ebp/esp。那么现在的rbp和rsp就维护了main函数维护的这块空间。先将edx的值放到rsp+10的位置。将ecx的值放到rsp+8的位置。
2024-03-16 15:31:18 842
原创 【数据结构和算法初阶(C语言)】队列实操(概念实现+oj题目栈和队列的双向实现以及循环链表难点题目详解!)
是否需要带哨兵位的链表:哨兵位是为了解决二级指针(可以将头尾指针封装为结构体进行传参,这样就可以改变真实的指针了,所以哨兵位可要可不要),尾插少一次判断。单向还是双向:选择单向,双向的优势是方便找前一个1节点,没有这个需求。那么后续有新数据要进入我们自己的“栈”直接进入有元素的队列尾进就好了,然后一样的办法进行出栈。数组和链表都可以实现队列,但是链表的头插尾插,头删尾删要方便些,所以首选链表。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,出队列:进行删除操作的一端称为。
2024-03-16 12:31:56 1641
原创 【Linux】-Linux下的软件商店yum工具介绍(linux和windows互传文件仅仅一个拖拽搞定!!!!)
以上就是本期内容,和技术的关联不大,但是可以为liNux的构建体系打一个好的基础。要注重知识本身,如果大家有补充的欢迎评论区偶遇。
2024-03-13 23:00:35 1437
原创 【数据结构和算法初阶(C语言)】栈的概念和实现(后进先出---后来者居上的神奇线性结构带来的惊喜体验)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。栈中的数据后面进的先出,也就是说不能够任意访问,添加和删除数据只能在栈顶进行操作。
2024-03-11 21:11:29 857
原创 【Linux】shell理解及linux权限解读(“花花公子Root”的自由人生)
主要工作: 将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者在用户和核心之间:一方面获取用户输入,获取指令,交给用户拿到执行结果在反馈给我们用户对于本期 Linux下的权限讲解就到这里。
2024-03-10 21:14:01 1559
原创 【Linux】Linux的常见指令详解(爆肝一周!!!!!!)
以上就是linux的常见的命令,关于指令大家可以不用就是刻意去记住,要用可以查询,多用就会熟悉,大家可以多做了解,看一下linux下还有那些好玩的指令比如sl:知识含量蛮多,大家可以配合解释和原码运行理解。
2024-03-10 13:40:25 2807
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人