自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 王道408考研数据结构-图-第六章

6.1 图的基本概念6.1.1 图的定义图G由顶点集V和边集 E组成,记为G=(V,E),其中 V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V={v?,v?,…,vn},则用|M表示图G中顶第6章 点的个数,E={(u,v) | uεV,vεV},用|E|表示图G中边的条数。1.有向图若E是有向边(也称弧)的有限集合,则图G为有向图。弧是顶点的有序对,记为,其中 v,w是顶点,v称为弧尾,w称为弧头,称为从v到 w的弧,也称v邻接到 w。

2024-10-02 15:23:19 605

原创 NP-hard问题

例如,对于一个旅行商问题(TSP),给定一个特定的旅行路线(解),我们可以在多项式时间内计算这条路线的总长度,并验证它是否满足问题的要求(比如是否是所有城市都经过且每个城市只经过一次的路线中的较短者)。归约是一种转换方法,例如,如果有问题 A 和问题 B,若能在多项式时间内将问题 A 的实例转化为问题 B 的实例,并且利用问题 B 的解能在多项式时间内得到问题 A 的解,就说 A 可以归约到 B。一个问题A可以约化为B的含义是,可以用问题B的解法解决问题A。这里强调的是验证解的速度,而非找到解的速度。

2024-10-02 13:02:35 580

原创 机器学习-KNN分类算法

由于找到的结果中大多数是猫,则把这个新动物划分为猫类。如果k值太大,学习的近似误差会增大,导致分类模糊,即欠拟合。对图5.2中的动物进行分类,当k=3时,分类结果为“猫:狗=2:1”,所以属于猫;当k=5时,表决结果为“猫:狗:熊猫=2:3:1”,所以判断目标动物为狗。KNN分类算法的核心思想:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。分类结果的确定往往采用多数表决原则,即由输入实例的k个最邻近的训练实例中的多数类决定输入实例的类别。

2024-09-26 09:20:23 1098

原创 Python基础快速入门

变量和数据类型运算符。

2024-09-24 18:17:34 952

原创 Python机器学习基础(NumPy、Pandas、Matplotlib)

它提供了高性能、易于使用的数据结构和数据分析工具。NumPy 是 Python 中用于科学计算的核心库,它提供了高性能的多维数组对象以及用于处理这些数组的工具。:一维数组,可以包含不同类型的数据,类似于一个带有索引的一维数组。:二维表格数据结构,由行和列组成,可以包含不同类型的数据。1.算术运算:可以对数组进行加、减、乘、除等算术运算。1.索引:可以通过整数索引访问数组中的元素。2.切片:可以使用切片操作访问数组的一部分。2.使用特殊的函数创建特定形状的数组,如。:可以改变数组的形状。

2024-09-24 18:17:33 918

原创 王道408考研数据结构-树与二叉树-第五章-第三四节

对应的递归算法如下: 2.中序遍历(InOrder)对应的递归算法如下: 3.后序遍历(PostOrder)对应的递归算法如下: 4.递归算法和非递归算法的转换 图5.10用带箭头的虚线表示了这三种遍历算法的递归执行过程。其中,向下的箭头表示更深一层的递归调用,向上的箭头表示从递归调用退出返回;虚线旁的三角形、圆形和方形内的字符分别表示在先序、中序和后序遍历的过程中访问根结点时输出的信息。例如,由于中序遍历中访问结点是在遍历左子树之后、遍历右子树之前进行的,

2024-09-23 21:10:11 1003

原创 王道408考研数据结构-串-第四章

以此类推,直至模式串 T中的每个字符依次和主串s中的一个连续的字符序列相等,则称匹配成功,函数值为与模式串 T中第一个字符相等的字符在主串S中的序号,否则称匹配不成功,函数值为零。例如,当模式串为'0000001'而主串为'O000000000000000000000000000000000000000 000001'时,由于模式串中的前6个字符均为'0',主串中的前45个字符均为'0',每趟匹配都是比较到模式串中的最后一个字符时才发现不等,指针i需要回溯39次,总比较次数为40x7=280次。

2024-09-20 21:17:16 376

原创 王道408考研数据结构-栈、队列和数组-第三章

3.1 栈3.1.1 栈的基本概念1.栈的定义栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作,如图3.1所示。栈顶(Top)。线性表允许进行插入删除的那一端。栈底(Bottom)。固定的,不允许进行插入和删除的另一端。空栈。不含任何元素的空表。3.1.2 栈的顺序存储结构栈是一种操作受限的线性表,类似于线性表,它也有对应的两种存储方式。1.顺序栈的实现。

2024-09-20 19:40:22 1061

原创 普通用户添加 sudo 权限

最后命令还是没能够执行, 原因是没有权限, 最后提示告诉我们sanji is not in the sudoers file, 因此我们只需要将用户sanji添加到这个文件中就可以了, 说干就干。原文链接: https://subingwen.cn/linux/sudoers/#2-%E6%B7%BB%E5%8A%A0sudo%E6%9D%83%E9%99%90。我们惊奇的发现这个文件的所有者root对它也只有读权限, 默认是不能修改的, 作为root以外的其他用户对它没有任何的操作权限。

2024-09-17 20:00:32 180

原创 王道408考研数据结构-线性表-第二章

2.1 线性表的定义2.1.1 线性表的定义线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n=0 时线性表是一个空表。若用L命名线性表,则其一般表示为式中,a1是唯一的“第一个”数据元素,又称表头元素;an是唯一的“最后一个”数据元素,又 称表尾元素。除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继(“直接前驱”和“前驱”、“直接后继”和“后继”通常被视为同义词)。

2024-09-17 14:45:22 1408

原创 王道408考研数据结构-绪论

1.1 数据结构的基本概念数据结构数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种数据元素相互之间的关系称为结构(Structure)。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。1.1.2 数据结构三要素1.数据的逻辑结构逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据。

2024-09-16 19:03:50 367

原创 王道408考研数据结构-树与二叉树-第五章-第一二节

树是n(n≥0)个结点的有限集。当n=0时,称为空树。有且仅有一个特定的称为根的结点。当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,⋯,Tm,其中每个集 合本身又是一棵树,并且称为根的子树。二叉树是一种特殊的树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度 大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。度为2的树至少有3个结点,而二叉树可以为空。

2024-09-12 18:48:16 1099

原创 线性表之队列

关于常用的受限制的线性表除了栈还有队列。建设文明和谐的社会需要队列,先进先出、先到先得这是一种公平的体现。由此可见栈、队列都是从日常生活中提炼出的结构化模型,是智慧的结晶。队列(Queue)作为一种常见的数据结构,遵循先进先出(First In First Out, FIFO)的原则,即最早进入队列的元素最先被移除。队列广泛应用于缓冲区管理、任务调度、消息队列等场景。

2024-09-10 17:18:30 829

原创 C++设计模式(观察者模式)

在观察者模式中,存在被观察的对象(主题)和观察这个对象的观察者。主题在自身状态发生变化时,会通知所有注册的观察者,让它们能够做出相应的反应。

2024-09-05 19:50:33 616

原创 线性表之栈

如果对线性表中元素的访问进行了限制,那么这个线性表就被称作受限制的线性表。常用的受限制的线性表有栈和队列。栈(Stack)是一种常见的数据结构,它遵循后进先出(Last In First Out,LIFO)的原则,即最新添加的元素最先被移除,也就是它要求仅能在表尾进行元素的插入和删除。

2024-09-05 09:00:21 776

原创 线性表之双向链表

对于单向链表和单向循环链表而言有一个共同的特点,就是链表的每个节点都只有一个指向后继节点的指针,通过这个指针我们就可以从前往后完成对链表的遍历。但是开弓没有回头箭,遍历到尾节点之后再想要回到头结点,是无能为力的。

2024-09-04 19:49:04 927

原创 带你学透0-1背包问题

首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0。如图:在看其他情况。状态转移方程。

2024-09-01 12:15:17 1458

原创 线性表之单向链表

在上一个章节中为大家详细讲解了静态链表,它解决了插入和删除数据的时候大量移动元素的问题,但是解决不了合理分配和使用内存的问题。解决这个问题的最优方案就是使用动态链表,简称链表。链表和数组都可以称之为线性表,数组是一种顺序存储结构的线性表,而链表是一种链式存储结构的线性表,链表中的节点和节点之间的内存是不连续的,它们之间的前后关系需要通过指针来维系。关于链表有很多种,比如:单向链表、单向循环链表,双向链表、双向循环链表,并且这些链表可以带头结点也可以不带头结点。

2024-09-01 11:34:17 825

原创 线性表之静态链表

链表是由多个相同类型的节点组成的线性表,它的每个节点都包含一个数据项和一个指向下一个节点的指针,链表中各个节点的地址是不连续的。静态链表是一种使用数组实现的链表,通常用于环境中无法使用指针的情况。这种结构在内存中是连续存储的,但节点的位置可以变化,因此称为静态链表。静态链表的节点结构和链表类似,但是不完全相同,当前节点连接后继节点使用的是索引而不是指针。

2024-08-31 12:15:16 620

原创 线性表之数组

数组(Array)是 C/C++ 中最基础和重要的数据结构之一,它提供了一种有效存储和访问固定大小元素集合的方式。关于数组的定义和使用相信大家都已经熟练掌握,本文将着重为大家剖析数组的物理结构和逻辑结构。

2024-08-31 12:08:21 1078

原创 算法复杂度

我们都知道,数据结构和算法本身解决的是 “快” 和 “省” 的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到本章要讲的内容:时间、空间复杂度分析。

2024-08-27 13:46:15 683

原创 数据结构与算法

数据结构和算法是计算机科学中的一组重要概念。

2024-08-27 13:29:19 1005

原创 Protobuf 保姆级教程

protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python 等,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

2024-08-25 10:41:09 664

原创 long long 整形

相比于C++98标准,C++11整型的最大改变就是多了long long。但事实上,long long 整型本来就离C++标准很近,早在1995年,long long 就被提议写入 C++98标准,却被C++标准委员会拒绝了。而后来,long long类型却进入了C99标准,而且也事实上也被很多编译器支持。于是辗转地,C++标准委员会又掉头决定将 long long纳入 C++11标准。

2024-08-24 17:49:01 727

原创 CMake 保姆级教程

1. CMake概述CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile,通过 make 命令进行项目的构建,大多是IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake等,如果自己动手写 makefile,会发现,makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。

2024-08-24 14:47:57 899

原创 C++设计模式(代理模式)

在海贼中,有一种神奇的通信工具叫做电话虫(Den Den Mushi),外形如蜗牛,身上带有斑点或条纹或通体纯色,壳顶上有对讲机或按键,不接通时会睡觉,接通时会惊醒,并发出“波噜波噜”的声音,在通话时电话虫的嘴巴会如同讲话人的嘴巴一样动,也有人的感情听得懂人类说话,工作原理是将人的声音转化为电话虫的声音进行长距离传接,经作者尾田荣一郎在SBS上证实这是自然生长的一种虫。

2024-08-07 11:52:21 623

原创 C语言MySQL API使用详解

众所周知,MySQL数据库是一个典型的C/S结构,即:客户端和服务器端。如果我们部署好了MySQL服务器,想要在客户端访问服务器端的数据,在编写程序的时候就可以通过官方提供的C语言的API来实现。在程序中连接MySql服务器,主要分为已经几个步骤:初始化连接环境连接已经建立, 后续操作就是对数据库数据的添删查改这些操作都是需要通过sql语句来完成的数据查询:通过调用api 执行一个查询的sql语句数据修改(添加/删除/更新):通过调用api 执行一个修改数据的sql语句。

2024-08-03 15:37:01 314

原创 初识Json

JSON是。它基于(欧洲计算机协会制定的js规范)的一个子集,。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。关于上面的描述可以精简为一句话:Json是一种数据格式,和语言无关,在什么语言中都可以使用Json。.jsonJson数组使用 [] 表示,[]里边是元素,元素和元素之间使用逗号间隔,整形浮点字符串布尔类型json数组json对象空值-null。由此可见Json数组比起C/C++数组要灵活很多。

2024-07-30 20:09:50 579

原创 C++线程同步之互斥锁

同时读同时写同时读写对于后两种情况来说,如果不做任何的人为干涉就会出现各种各样的错误数据。这是因为线程在运行的时候需要先得到CPU时间片,时间片用完之后需要放弃已获得的CPU资源,就这样线程频繁地在就绪态和运行态之间切换,更复杂一点还可以在就绪态、运行态、挂起态之间切换,这样就会导致线程的执行顺序并不是有序的,而是随机的混乱的,就如同下图中的这个例子一样,理想很丰满现实却很残酷。std::mutex互斥锁在有些资料中也被称之为互斥量,二者是一个东西。

2024-07-30 14:19:05 790

原创 C++11新特性--线程的使用

C++11之前,C++语言没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。现在C++11中增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。C++11中提供的线程类叫做,基于这个类创建一个新的线程非常的简单,只需要提供线程函数或者函数对象即可,并且可以同时指定线程函数的参数。

2024-07-29 13:20:57 667

原创 命名空间 -- this_thread

在C++11中不仅添加了线程类,还添加了一个关于线程的命名空间std::this_thread,在这个命名空间中提供了四个公共的成员函数,通过这些成员函数就可以对当前线程进行相关的操作了。

2024-07-27 15:35:40 538

原创 C++11新特性--弱引用智能指针

在 C++ 中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。

2024-07-26 18:29:42 867

原创 C++11新特性--独占智能指针

在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。

2024-07-26 18:10:26 329

原创 C++11新特性--共享智能指针

在C++中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动地销毁动态分配的对象,防止内存泄露。智能指针的核心实现技术是引用计数,每使用它一次,内部引用计数加1,每析构一次内部的引用计数减1,减为0时,删除所指向的堆内存。

2024-07-25 18:16:08 1109

原创 Linux下安装Redis(超简单)

选着自己需要下载的版本后,右击选择复制链接,然后利用命令进行下载,进入控制台,输入wget将复制的链接粘帖上,这里我选择的是6.0.6版本。

2024-07-22 16:39:59 273

原创 C++11新特性--委托构造和继承构造函数

委托构造函数允许使用同一个类中的一个构造函数调用其它的构造函数,从而简化相关变量的初始化。在修改之后的代码中可以看到,重复的代码全部没有了,并且在一个构造函数中调用了其他的构造函数用于相关数据的初始化,相当于是一个链式调用。

2024-07-18 14:02:28 425

原创 C++设计模式(装饰器模式)

在实现装饰器模式时,通常会有一个抽象构件(Component)类定义了对象的基本操作接口,具体构件(ConcreteComponent)类实现了这些基本操作,装饰器(Decorator)类继承自抽象构件类并包含一个指向抽象构件对象的引用,具体装饰器(ConcreteDecorator)类在装饰器类的基础上实现了额外的功能。ConcreteDecoratorA 和 ConcreteDecoratorB 是具体的装饰器类,它们重写了 operation 方法,在调用被装饰组件的操作前后添加了额外的功能。

2024-07-16 19:03:24 382

原创 IO多路复用之epoll

epoll 全称 eventpoll,是 linux 内核实现IO多路转接/复用(IO multiplexing)的一个实现。IO多路转接的意思是在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。epoll是select和poll的升级版,相较于这两个前辈,epoll改进了工作方式,因此它更加高效。对于待检测集合select和poll是基于线性方式处理的,epoll是基于红黑树来管理待检测集合的。

2024-07-12 21:12:13 886

原创 IO多路复用之poll

函数参数:nfds: 这是第一个参数数组中最后一个有效元素的下标 + 1(也可以指定参数1数组的元素总个数)timeout: 指定poll函数的阻塞时长。

2024-07-10 22:06:02 359

原创 IO多路复用之select

IO多路复用也称IO多路转接,它是一种网络通信的手段(机制),通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的,一旦检测到有文件描述符就绪( 可以读数据或者可以写数据)程序的阻塞就会被解除,之后就可以基于这些(一个或多个)就绪的文件描述符进行通信了。通过这种方式在单线程/进程的场景下也可以在服务器端实现并发。常见的IO多路转接方式有:select、poll、epoll。

2024-07-09 20:46:52 2137

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除