数据结构之四:堆和二叉树
堆的实现:SData/Heap/heap.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国
树
树的概念
树:是一个非线性数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。
把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
- 有一个特殊的结点,称为根结点,根节点没有前驱结点。
- 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
- 因此,树是递归定义的。
树形结构中,子树之间不能有交集,否则就不是树形结构。
(树中不能构成回路,不能有孤立的点)。
如何理解树是递归定义的呢?
相关概念
树的结构定义
链式表示:
数组表示:
二叉树
二叉树概念
一棵二叉树是结点的一个有限集合,该集合:
- 或者为空。
- 由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
- 二叉树不存在度大于2的结点。
- 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
特殊的二叉树
- 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值(2),则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K。那么,结点总数是(2^K - 1),则它就是满二叉树。
- 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。满二叉树是一种特殊的完全二叉树。(假设有k层的完全二叉树,前k-1层都是满的,最后一层可以不满,但必须是从左到右连续)。
二叉树性质
1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)个结点。
2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h -1。
3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有n0=n2+1。
即:度为0(叶子结点)的数量 = 度为2的结点数量 + 1 。
3.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A n
B n+1
C n-1
D n/2解析:假设叶子结点右x个,则度为2的结点右x-1个
总节点数 = x + (x - 1) + 度为1的结点数量
所以:总数量= 2*n =x+(x-1)+1 = > x=n
4.二叉树的高度:(用于堆的选树、搜索二叉树、平衡搜索二叉树)
二叉树存储
二叉树的逻辑结构是一棵树,物理结构分为顺序存储和链式存储两种结构。
数组实现:
------------------------------------------------二叉树实现在文章末尾 ------------------------------------------------
堆
堆:实际上就是数组形式存储的完全二叉树。(逻辑结构是完全二叉树,物理结构是数组)
堆的作用:堆排序效率高、选数等
向下调整算法
(向下调整算法是堆中最重要的算法,堆、堆排序等都需要调整算法来支撑。
向下调整算法构建堆:
前提是:根节点的左右字数必须是大堆或者小堆。
//向下调整算法
//左右子树必须保证:都是小堆(或者大堆)
static void AdjustDown(HPDataType* a, int n, int root)
{int parent = root;int child = parent * 2 + 1;//默认是左孩子更小while (child<n){//找出左右孩子中小的一个if (child+1<n && a[child + 1] < a[child]){++child;}//如果孩子小于父亲则交换if (a[child] < a[parent]){Swap(&a[child], &a[parent]);parent = child;child = parent*2+1;}else{break;}}
}
数组建堆
向下调整算法用于建堆
//arr是传入的数据 arr[n]
void HeapInit(Heap* php, HPDataType* arr, int n)
{assert(php);php->_a = (HPDataType*)malloc(sizeof(HPDataType) * n);if (php->_a == NULL){printf("%s\n", strerror(errno));return;}memcpy(php->_a, arr, sizeof(HPDataType) * n);//内存拷贝php->_size = n;php->_capacity = n;//数组建堆//利用的向下调整算法:// 从最下面的第一个非叶子结点开始调整,// 一层层完成小堆的构建//直到根节点,在对根节点向下调整int i = 0;for (i=(php->_size-1);i >= 0; i--){AdjustDown(php->_a, php->_size, i);}//
}
向上调整算法
向上调整算法用于入堆。
向上调整算法与向下调整类似,不过是从子节点往父节点走。对于堆而言,父节点和子节点的下标关系是必须掌握的。
void AdjustUp(HPDataType* arr,int n,int child)
{//从子节点往父结点调整//由child得出parentint parent= (child-1)/2;while(child>=0){if(arr[child]<arr[parent]){Swap(&arr[child],&arr[parent]); //child=parent;parent=(child-1)/2; //迭代向上}else{break;}}
}
堆排序:见排序与查找-CSDN博客。
入堆
void HeapPush(Heap* php, HPDataType x)
{assert(php);if (php->_size == php->_capacity){php->_capacity *= 2;HPDataType* tmp = (HPDataType*)realloc(php->_a,sizeof(HPDataType) * (php->_size));if (tmp == NULL){printf("%s\n", strerror(errno));return;}php->_a = tmp;}php->_a[php->_size++] = x;AdjustUp(php->_a, php->_size, php->_size-1);}
与堆有关的OJ题:面试题 17.14. 最小K个数 - 力扣(LeetCode)(典型的TopK问题)
N个树中找出最大或最小的前K个数?
- 排序 问题:a、N*logN的效率能否进一步提高? b、假设N非常大,内存不够排序
- 建一个大小为K的堆来解决问题,
eg:找最大的前K个,建一个大小为K的小堆,比堆顶大则进堆(顶替掉堆顶的数据,然后向下调整)。
- 大堆性质:堆顶的元素一定是最大的。(找最小的K个数)。
- 小堆性质:堆顶的元素一定是最小的。(找最大的K个数)。
解法一在:leetcode/TopK/test_1.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国
//建K大小的堆解法
void Swap(int* x, int* y) {int tmp = *x;*x = *y;*y = tmp;
}void AdjustDown(int* arr, int n, int root) {int parent = root;int child = parent * 2 + 1;while (child < n) // child不越界{if (child + 1 < n && arr[child + 1] > arr[child]) // 大堆找更大的孩子{child++;}if (arr[child] > arr[parent]) // 大堆的父节点更大{Swap(&arr[child], &arr[parent]);parent = child;child = 2 * parent + 1; // 向下迭代} else {break;}}
}int* smallestK(int* arr, int arrSize, int k, int* returnSize) {*returnSize = k;if (k == 0)return NULL;int* retArr = (int*)malloc(sizeof(int) * k);*returnSize = k;int i = 0;// 建K个数的大堆:for (i = 0; i < k; i++) {retArr[i] = arr[i];}for (i = (k - 1 - 1) / 2; i >= 0; i--) {AdjustDown(retArr, k, i);} // 大堆建立完成:K个数的大堆int j = 0;for (j = k; j < arrSize; j++) {if (arr[j] < retArr[0]) {retArr[0] = arr[j];AdjustDown(retArr, k, 0);}}return retArr;
}
------------------------------------------------堆到此结束 ------------------------------------------------
二叉树
伪树
在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在对二叉树结构掌握还不够深入,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。
BTNode* BuyNode(BTDataType ch)
{BTNode* node = (BTNode*)malloc(sizeof(BTNode));node->_data = ch;node->_left = NULL;node->_right = NULL;return node;
}
//一个树的增删查改没有意义
//这里写一颗伪树
BTNode* A = BuyNode('A');
BTNode* B = BuyNode('B');
BTNode* C = BuyNode('C');
BTNode* D = BuyNode('D');
BTNode* E = BuyNode('E');
BTNode* f = BuyNode('f');
A->_left = B;
A->_right = C;
B->_left = D;
B->_right = E;
D->_left = f;
(学习二叉树的目的是为了掌握更加深层的数据结构,因此会边学边补充)
任何一个二叉树,都要看作三个部分:
1、根节点。2、左子树。3、右子树。
遍历
- 深度优先遍历:先往深处走,无路可走是退回来 访问其他结点。(递归和栈实现)。
- 广度优先遍历:一层层的走,走完一层走下一层。(队列实现)。
树不同于其他的数据结构:
- 简单的树的增删查改没有意义。
- 单独的二叉树没有意义。
- 平衡二叉树和搜索二叉树才有实际意义。
深度优先遍历
// 二叉树前序遍历
void PreOrder(BTNode* root);
// 二叉树中序遍历
void InOrder(BTNode* root);
// 二叉树后序遍历
void PostOrder(BTNode* root);
typedef char BTDataType;
typedef struct BinaryTree
{BTDataType _data;struct BinaryTree* _left;struct BinaryTree* _right;
}BTNode;
//前序
void PreOrder(BTNode* root)
{if (root == NULL){printf("NULL ");return;}printf("%c ", root->_data); //根PreOrder(root->_left); //左子树PreOrder(root->_right); //右子树
}
int TreeSize(BTNode* root)
{if (root == NULL)return 0;elsereturn 1 + TreeSize(root->_left) + TreeSize(root->_right);
}
关于TreeSize如何返回值?
广度优先遍历
广度优先遍历:即层序遍历,与递归无关,通过队列的性质(先进先出)来实现。
结点个数
// 二叉树节点个数
int BinaryTreeSize(BTNode* root);
// 二叉树叶子节点个数
int BinaryTreeLeafSize(BTNode* root);
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x);
实现
int BinaryTreeSize(BTNode* root)
{if (root == NULL)return 0;elsereturn 1 + TreeSize(root->_left) + TreeSize(root->_right);
}
int BinaryTreeLeafSize(BTNode* root)
{if (root == NULL){return 0;}else if(root->_left == NULL && root->_right == NULL){return 1;}else{return TreeLeafSize(root->_left) + TreeLeafSize(root->_right);}
}
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{if (root == NULL)return 0;if (k == 1){return 1;}return BinaryTreeLevelKSize(root->_left, k - 1)+ BinaryTreeLevelKSize(root->_right, k - 1);
}
查找
// 二叉树查找值为x的节点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{if (root == NULL)return NULL;if (root->_data == x)return root;BTNode* node = BinaryTreeFind(root->_left, x);if (node)return node;node = BinaryTreeFind(root->_right, x);if (node)return node;return NULL;
}
销毁
// 二叉树销毁
void BinaryTreeDestory(BTNode* root);
// 二叉树销毁
void BinaryTreeDestory(BTNode* root)
{if (root == NULL)return;BinaryTreeDestory(root->_left);BinaryTreeDestory(root->_right);free((root));//后序free不需要保存左和右root = NULL;
}
判断一棵树是否是完全二叉树
// 判断二叉树是否是完全二叉树
//是返回1,不是返回0
int BinaryTreeComplete(BTNode* root)
{//完全二叉树的层序遍历是两段:非空结点+空节点Queue q;QueueInit(&q);if (root == NULL)return 0;QueuePush(&q, root);while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);if (front == NULL){break;}QueuePush(&q, front->_left);QueuePush(&q, front->_right);}while (!QueueEmpty(&q)){BTNode* front = QueueFront(&q);QueuePop(&q);if (front){QueueDestory(&q);return 0;}}QueueDestory(&q);return 1;
}
------------------------------------------本文二叉树到此结束-----------------------------------------------
到这里,二叉树的学习进程仅有40%左右,其余待补充.....
相关文章:
数据结构之四:堆和二叉树
堆的实现:SData/Heap/heap.c Hera_Yc/bit_C_学习 - 码云 - 开源中国 树 树的概念 树:是一个非线性数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看起来像一棵倒挂的树,也就…...
语音识别flask接口开发
要开发一个flask语音识别接口,首先要解决语音文件在网络中的传输问题,然后选识别算法进行识别 文章目录 1、以二进制文件流方式上次语音2、网页端长连接流式上传语音文件3、语音识别接口 1、以二进制文件流方式上次语音 python服务端代码,以…...
MISRA C2012学习笔记(10)-Rules 8.15
文章目录 8.15 控制流(Control flow)Rule 15.1 不应使用 goto 语句Rule 15.2 goto 语句仅允许跳到在同一函数中声明的稍后位置的标签Rule 15.3 goto 语句引用的标签必须在 goto 语句所在代码块或包含该代码块的上级代码块中声明Rule 15.4 最多只能有一个用于终止循环语句的 bre…...
《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
MAC算法有两种形式,分别是CBC-MAC算法和HMAC算法。 CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值。 HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元&am…...
DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建
知识点: 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源,只要在“…...
如何实现 3D GPR的仿真模拟
通过ai问题生成得到的。 1 模型文件-MATLAB 在gprmax中模拟3D GPR工作,可以通过编写一个MATLAB脚本来创建几何文件,并使用gprmax的输入文件(in文件)来设置模拟参数。以下是一个简单的例子程序,展示了如何创建一个3D …...
k8s 之 Deployment
(1)Deployment 作用是确保 Pod 副本数量,能够保证 Pod 数量与期望值一样,会有自恢复功能。简洁地说:具有 水平扩展 / 收缩 功能。 可能好奇的是在 kubernetes 中是谁在执行这些控制器的,它就是 kube-contr…...
现代C++ 6 声明
文章目录 C 中的冲突声明规则1. **对应声明(Corresponding Declarations)**2. **对应函数重载(Corresponding Function Overloads)**3. **对应函数模板重载(Corresponding Function Template Overloads)**4…...
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
目录 一、Spark核心概念 1、应用程序Application 2、作业Job 3、阶段Stage 4、任务Task 二、示例 一、Spark核心概念 在Apache Spark中,有几个核心概念用于描述应用程序的执行流程和组件,包括应用程序 Application、作业Job、阶段Stage、任务Task…...
【WebRTC】Android SDK使用教学
文章目录 前言PeerConnectionFactoryPeerConnection 前言 最近在学习WebRTC的时候,发现只有JavaScript的API文档,找了很久没有找到Android相关的API文档,所以通过此片文章记录下在Android应用层如何使用WebRTC 本篇文章结合:【W…...
算法-字符串-8.字符串转换整数
一、题目 二、思路解析 1.思路: 依次遍历,查看当前字符是否在规定范围内 2.常用方法: 1.trim(),去字符串的首尾空字符 ss.trim(); 2.substring(beginIndex),截断字符串,得到新的字符串是[1,s.length()-1] ss.substring(1); 3.st…...
普通算法——一维前缀和
一维前缀和 题目链接:https://www.acwing.com/problem/content/797/ 题目描述: 输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。 **什么是…...
【Elasticsearch】ES+MySQL实现迷糊搜索
1. 技术选型 使用 Elasticsearch (ES) 结合 MySQL 进行数据存储和查询,而不是直接从 MySQL 中进行查询,主要是为了弥补传统关系型数据库(如 MySQL)在处理大规模、高并发和复杂搜索查询时的性能瓶颈。具体来说,ES 与 My…...
MacOS编译webRTC源码小tip
简单记录一下,本人在编译webRTC时,碰到了一下比较烦人的问题,在MacOS终端下,搭建科学上网之后,chromium的depot_tools仓库成功拉下来了,紧接着,使用fetch以及gclient sync始终都返回curl相关的网…...
Android显示系统(05)- OpenGL ES - Shader绘制三角形(使用glsl文件)
Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…...
深度学习小麦头检测-基于Faster-RCNN的小麦头检测——附项目源码
比赛描述 为了获得有关全世界麦田的大量准确数据,植物科学家使用“小麦头”(包含谷物的植物上的穗)的图像检测。这些图像用于估计不同品种的小麦头的密度和大小。但是,在室外野外图像中进行准确的小麦头检测可能在视觉上具有挑战性。密集的小麦植株经常重叠,并且风会使照片…...
成像报告撰写格式
成像报告撰写格式 实验人员: 实验时间: 实验地点: 实验目的: 1实验仪器 1.1相机 包括制造商,型号,面阵还是线阵,彩色还是黑白,图像尺寸,光学接口等。 1.2镜头 包…...
【数学建模】线性规划问题及Matlab求解
问题一 题目: 求解下列线性规划问题 解答: 先将题目中求最大值转化为求最小值,则有 我们就可以得到系数列向量: 我们对问题中所给出的不等式约束进行标准化则得到了 就有不等式约束条件下的变系数矩阵和常系数矩阵分别为: 等式…...
C# 事件(Event)
文章目录 前言1、 声明委托2、 声明事件3、 触发事件4、订阅和取消订阅事件5、示例展示示例一:基础的事件使用流程示例二:简单数值变化触发事件示例三:锅炉系统相关事件应用 前言 在 C# 中,事件(Event)是一…...
企业数字化转型:从爆品起步,迈向生态平台
在当今数字化浪潮席卷全球的时代,企业数字化转型已成为必然趋势。然而,这条转型之路该如何走呢? 企业数字化转型的路径设计,绝不仅仅是技术的升级换代,它需要综合考量多方面因素。一方面,要为实现战略目标做…...
Windows 安装 MySQL
1.下载 MySQL 安装包 访问:MySQL :: Download MySQL Installer选择适合的版本。推荐下载 MySQL Installer for Windows,该安装包包含所有必要的组件选择 Windows (x86, 32-bit), MSI Installer 或 Windows (x86, 64-bit), MSI Installer 2.运行安装程序…...
游戏引擎学习第37天
仓库 : https://gitee.com/mrxiao_com/2d_game 回顾目前的进展 一个简单的调试工具——位图加载器,用于加载存储在硬盘上的位图文件。这个工具将文件加载到内存中,并查看文件头部信息,确保其正确性。接着使用位图头中的偏移量来获取像素数据…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
知乎Java后台开发面试题及参考答案
请简述 TCP 的三次握手和四次挥手过程。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 三次握手过程 首先,客户端想要建立连接,会发送一个带有 SYN(同步序列号)标志的 TCP 报文段,这个报文段中还包含一个初始序列号(ISN,Initial Sequenc…...
Java中的String类用法详解
1.字符串拆分 可以把一个完整的字符串按照规定的分隔符拆分为若干个子字符串 String[] split(String regex) 将字符串全部拆分 String[] split(String regex,int limit) 将字符串以指定的格式拆分,拆分成limit组 实例:字符串的拆分处理 public class Main4 {public stat…...
mac电脑安装hadoop、hive等大数据组件
背景:用本地的Hadoop测试Java调用cmd命令 2024-12-08 13:48:19,826 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable ls: .: No such file or directory解决方案:…...
DHCP和DNS
DHCP(动态主机配置协议)和DNS(域名系统)是计算机网络中两个重要的协议,它们在网络的管理和使用中发挥着关键作用。 DHCP(动态主机配置协议) 基本功能 自动分配IP地址:DHCP允许网…...
Postman安装使用教程
Postman(接口测试工具) ①、介绍 Postman是一款支持http协议的接口调试与测试工具,它不仅可以调试简单的css、html、脚本等简单的网页基本信息,还可以发送几乎所有类型的HTTP请求。 ②、安装 Ⅰ、运行安装包/官网直搜 Ⅱ、创建…...
剖析千益畅行,共享旅游-卡,合规运营与技术赋能双驱下的旅游新篇
在数字化浪潮席卷各行各业的当下,旅游产业与共享经济模式深度融合,催生出旅游卡这类新兴产品。然而,市场乱象丛生,诸多打着 “共享” 幌子的旅游卡弊病百出,让从业者与消费者都深陷困扰。今天,咱们聚焦技术…...
信创改造-达梦数据库配置项 dm.ini 优化
设置模式:兼容MySQL,COMPATIBLE_MODE 4 内存占比:90%,MAX_OS_MEMORY 90 目标内存:2G(不影响申请内存超过2G,但这部分内存不会回收),MEMORY_TARGET 2000 参考 https:…...
docker入门 自记录
1.先自己下载离线bao .tar 或者 自己pull docker pull xxx 如果遇到网络问题就换源 2.之后run一个docker 后面是映射本地路径 sudo docker run -it --name ultralytics_241124 --gpus all --shm-size 8G -v /home/oppenheim/detect/train241204/docker:/home/docker ultralyti…...
Axure设计之动态图表——排名图(中继器)
粉丝问我可不可以用中继器做条形图,而且是要做成自动增长的排名图表。所以现在教大家怎么用axure来制作制作排名图。 这个原型制作完成之后,后期有类似的功能,直接拿过去使用也比较简单,基本只需要修改中继器数据就可以了。喜欢、…...
在Java中几种常用数据压缩算法的实现及其优劣势
在Java中几种常用数据压缩算法的实现及其优劣势 背景:项目需要引入Redis作为缓存组件,需要考虑到Redis的内存占用(机器内存越大,成本越高),因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...
Mac通过Windows App远程访问windows电脑报错0x104的解决办法
1、远程windows电脑,确保打开 远程访问 2、Mac电脑上的配置: 2.1 新版的windows app远程桌面软件相比之前老的Microsoft Remote Desktop,对于mac来说,不会弹出“是否允许该app查找本地网络设备”,需要手动打开 操作步…...
Spring Boot接口返回统一格式
统一的标准数据格式好处 SpringBoot返回统一的标准数据格式主要有以下几点好处: 增强接口的可读性和可维护性,使得前端开发人员能够更加清晰地理解接口返回的数据结构,从而提高开发效率。 降低前后端耦合度,当后端需要修改返回数…...
小程序入门学习(八)之页面事件
一、下拉刷新新事件 1. 什么是下拉刷新 下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为。 2. 启用下拉刷新 启用下拉刷新有两种方式: 全局开启下拉刷新:在 app.json 的 window…...
Docker基础【windows环境】
课程内容来自尚硅谷3小时速通Docker教程 1. Docker简介 Docker 通过 Docker Hub 实现一行命令安装应用(镜像)【Nginx,Mysql等】,避免繁琐的部署操作。同时通过轻量级(相对于虚拟机)的容器化的思想&#x…...
【docker】docker compose 和 docker swarm
Docker Compose 和 Docker Swarm 都是 Docker 生态中的工具,但它们有不同的用途和目标。 下面是这两者的主要区别,帮助你理解它们在不同场景中的使用。 1. 用途和目标 Docker Compose: 目标:主要用于在单个机器上定义和运行多个容器应用&a…...
第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步]
第三部分:进阶概念 7.数组与对象 --[JavaScript 新手村:开启编程之旅的第一步] 在 JavaScript 中,数组和对象是两种非常重要的数据结构,它们用于存储和组织数据。尽管它们都属于引用类型(即它们存储的是对数据的引用而…...
LabVIEW密码保护与反编译的安全性分析
在LabVIEW中,密码保护是一种常见的源代码保护手段,但其安全性并不高,尤其是在面对专业反编译工具时。理论上,所有软件的反编译都是可能的,尽管反编译不一定恢复完全的源代码,但足以提取程序的核心功能和算法…...
Docker魔法:用docker run -p轻松开通容器服务大门
前言 “容器”与“虚拟化”作为现代软件开发和运维中的关键概念,已经广泛应用于各个技术领域。然而,在使用 Docker 部署应用时,常常会遇到这样的问题:容器正常运行,却无法让外界访问其内部服务?即使容器内的应用顺利启动,外部无法通过浏览器或 API 进行连接。此时,doc…...
ubuntu防火墙(三)——firewalld使用与讲解
本文是Linux下,用ufw实现端口关闭、流量控制(二) firewalld使用方式 firewalld 是一个动态管理防火墙的工具,主要用于 Linux 系统(包括 Ubuntu 和 CentOS 等)。它提供了一个基于区域(zones)和服务&#x…...
【大数据技术基础 | 实验十一】Hive实验:新建Hive表
文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤(一)启动Hive(二)创建表(三)显示表(四)显示表列(五)更改表(六&am…...
Python实现Excel中数据条显示
Python中要实现百分比数据条的显示,可以使用pandas库,pandas图表样式的设置与Excel中的条件格式设置比较类似,比如Excel里常用的数据条的用法,在pandas中使用代码进行高亮显示,用来突出重点数据,下面一起来…...
矩阵与向量的基本概念
**一、四个基本子空间的定义** 1. **行空间(Row Space)** 行空间是由矩阵的所有行向量所形成的空间。它包含所有可能的行向量的线性组合。行空间的维度称为矩阵的行秩。 2. **零空间(Null Space)** 零空间是与矩阵相乘后结果为零的…...
亚马逊云科技大语言模型加速OCR应用场景发展
目录 前言Amazon Bedrock关于OCR解决方案Amazon Bedrock进行OCR关键信息提取方案注册亚马逊账号API调用环境搭建 总结 前言 大语言模型是一种基于神经网络的自然语言处理技术,它能够学习和预测自然语言文本中的规律和模式,可以理解和生成自然语言的人工…...
十九(GIT2)、token、黑马就业数据平台(页面访问控制(token)、首页统计数据、登录状态失效)、axios请求及响应拦截器、Git远程仓库
1. JWT介绍 JSON Web Token 是目前最为流行的跨域认证解决方案,本质就是一个包含信息的字符串。 如何获取:在使用 JWT 身份验证中,当用户使用其凭据成功登录时,将返回 JSON Web Token(令牌)。 作用…...
深入探索现代 IT 技术:从云计算到人工智能的全面解析
目录 1. 云计算:重塑 IT 基础设施 2. 大数据:挖掘信息的价值 3. 物联网(IoT):连接物理世界 4. 区块链:重塑信任机制 5. 人工智能(AI):智能未来的驱动力 结语 在当今…...
Redis的持久化
目录 1. 文章前言2. RDB2.1 触发机制2.2 流程说明2.3 RDB文件的处理2.4 RDB的优缺点 3. AOF3.1 使用AOF3.2 命令写入3.3 文件同步3.4 重写机制3.5 启动时数据恢复 4. 持久化总结 1. 文章前言 (1)Redis支持RDB和AOF两种持久化机制,持久化功能…...
小型支付商城系统-MVC工程架构开发
第1-1节 DDD 架构概念 1.DDD 是什么 那 DDD 是什么呢?来自于维基百科的一段定义:"Domain-driven design (DDD) is a major software design approach. ",DDD 是一种软件设计方法。也就是说 DDD 是指导我们做软件工程设计的一种手…...