2024年808数据结构答案
1.已知带头结点单链表,H为头指针。设计一个算法,查找到链表的第m个结点(不包含头结点),并将元 素值为X的结点插入到该结点后,形成一个新的链表。
// 定义单链表节点结构
typedef struct Node {int data;struct Node* next;
} Node;// 创建新节点的函数
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (newNode == NULL) {printf("内存分配失败!\n");exit(1);}newNode->data = data;newNode->next = NULL;return newNode;
}// 查找链表中第m个节点的函数(不包括头节点)
Node* findMthNode(Node* head, int m) {Node* current = head->next; // 跳过头结点int count = 1;while (current != NULL && count < m) {current = current->next;count++;}if (count == m && current != NULL) {return current;} else {return NULL; // 第m个节点不存在}
}// 在第m个节点后插入新节点的函数
void insertAfterMthNode(Node* head, int m, int X) {Node* mthNode = findMthNode(head, m);if (mthNode == NULL) {printf("链表中不存在第%d个节点!\n", m);return;}Node* newNode = createNode(X);newNode->next = mthNode->next;mthNode->next = newNode;
}
第一题
1.请编写程序,利用非递归的折半查找方法判定某个整数是否在一个有序整数数组 r[n]中。
以下是一个利用非递归折半查找(即二分查找)方法,来判断某个整数是否在一个有序整数数组中的C语言实现:
#include <stdio.h>// 非递归折半查找(即二分查找)函数
int binarySearch(int r[], int n, int target) {int left = 0;int right = n - 1;// 当左指针小于等于右指针时,继续搜索while (left <= right) {int mid = left + (right - left) / 2; // 计算中间索引,避免溢出if (r[mid] == target) {return mid; // 找到目标值,返回索引} else if (r[mid] < target) {left = mid + 1; // 目标值在右半部分} else {right = mid - 1; // 目标值在左半部分}}return -1; // 未找到目标值,返回-1
}int main() {// 有序整数数组int r[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};int n = sizeof(r) / sizeof(r[0]); // 计算数组长度// 要查找的目标值int target;printf("请输入要查找的整数:");scanf("%d", &target);// 调用折半查找函数int result = binarySearch(r, n, target);// 输出查找结果if (result != -1) {printf("整数%d在数组中的位置为: %d\n", target, result);} else {printf("数组中不存在整数%d\n", target);}return 0;
}
代码说明:
binarySearch
函数:这是一个非递归实现的折半查找函数。通过左右指针和中间索引来缩小搜索范围。每次比较中间值后,根据大小调整左右指针,直到找到目标值或范围结束。main
函数:定义了一个有序的整数数组r[]
,接受用户输入的目标值,调用折半查找函数并输出结果。
示例输出:
请输入要查找的整数:7
整数7在数组中的位置为: 3
如果输入的值不在数组中:
请输入要查找的整数:8
数组中不存在整数8
复杂度分析:
- 时间复杂度:O(log n),因为每次将搜索范围缩小一半。
- 空间复杂度:O(1),因为只使用了几个额外的变量。
第二题
2.编写计算二叉树叶子节点个数的算法
以下是一个用C语言实现的计算二叉树叶子节点个数的算法:
#include <stdio.h>
#include <stdlib.h>// 定义二叉树节点结构
typedef struct Node {int data;struct Node* left;struct Node* right;
} Node;// 创建新节点的函数
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (!newNode) {printf("内存分配失败\n");exit(1);}newNode->data = data;newNode->left = NULL;newNode->right = NULL;return newNode;
}// 计算二叉树叶子节点个数的函数
int countLeafNodes(Node* root) {if (root == NULL) {return 0; // 空树没有叶子节点}// 如果左右子节点都为空,则该节点是叶子节点if (root->left == NULL && root->right == NULL) {return 1;}// 递归计算左子树和右子树中的叶子节点数目return countLeafNodes(root->left) + countLeafNodes(root->right);
}int main() {// 创建一个简单的二叉树/*1/ \2 3/ \ / 4 5 6 */Node* root = createNode(1);root->left = createNode(2);root->right = createNode(3);root->left->left = createNode(4);root->left->right = createNode(5);root->right->left = createNode(6);// 计算叶子节点个数int leafCount = countLeafNodes(root);printf("二叉树的叶子节点个数: %d\n", leafCount);return 0;
}
代码说明:
Node
结构体:定义了二叉树的节点,每个节点包含数据、左子节点和右子节点指针。createNode
函数:用于创建一个新的二叉树节点。countLeafNodes
函数:这是递归函数,用来计算叶子节点个数。它通过判断节点是否为叶子节点(即左右子节点都为空),递归遍历左右子树,统计所有叶子节点。main
函数:构建一个简单的二叉树,并调用countLeafNodes
函数计算其叶子节点个数。
示例输出:
二叉树的叶子节点个数: 3
对于上面的示例二叉树,叶子节点为4
、5
和6
,因此叶子节点个数为3
。
复杂度分析:
- 时间复杂度:O(n),n为二叉树的节点个数。每个节点都会被访问一次。
- 空间复杂度:O(h),h为二叉树的高度,递归调用栈的深度最大为树的高度。
第三题
3.实现栈的基本操作,并利用栈实现十进制到二进制的转换,输入为一个十进制整
数,输出为二进制序列,如十进制85变成二进制1010101(10分)。
以下是一个C语言实现的栈的基本操作,以及利用栈实现十进制到二进制转换的程序:
代码实现:
#include <stdio.h>
#include <stdlib.h>#define MAX 100 // 栈的最大容量// 定义栈结构
typedef struct Stack {int data[MAX]; // 用数组来存储栈中的元素int top; // 栈顶指针
} Stack;// 初始化栈
void initStack(Stack* s) {s->top = -1; // 栈为空时,栈顶指针设为-1
}// 判断栈是否为空
int isEmpty(Stack* s) {return s->top == -1;
}// 判断栈是否已满
int isFull(Stack* s) {return s->top == MAX - 1;
}// 入栈操作
void push(Stack* s, int value) {if (isFull(s)) {printf("栈已满,无法执行入栈操作\n");return;}s->data[++(s->top)] = value; // 将元素压入栈顶
}// 出栈操作
int pop(Stack* s) {if (isEmpty(s)) {printf("栈为空,无法执行出栈操作\n");exit(1);}return s->data[(s->top)--]; // 返回栈顶元素并减少栈顶指针
}// 利用栈将十进制数转换为二进制
void decimalToBinary(int num) {Stack s;initStack(&s);// 当十进制数大于0时,不断取余数,并将余数入栈while (num > 0) {push(&s, num % 2); // 将余数入栈num /= 2; // 更新num为其商}// 依次弹出栈中的元素,得到二进制序列printf("二进制序列: ");while (!isEmpty(&s)) {printf("%d", pop(&s));}printf("\n");
}int main() {int decimalNumber;// 输入十进制数printf("请输入一个十进制整数: ");scanf("%d", &decimalNumber);// 将十进制转换为二进制decimalToBinary(decimalNumber);return 0;
}
代码说明:
-
栈的基本操作:
initStack
:初始化栈,设置栈顶指针为-1
。isEmpty
:判断栈是否为空。isFull
:判断栈是否已满。push
:将元素压入栈顶。pop
:从栈顶弹出元素并返回。
-
十进制到二进制的转换:
- 利用栈来存储每次除以
2
的余数,直到商为0
。 - 然后通过依次弹出栈中的元素来构建二进制数。
- 利用栈来存储每次除以
输入输出示例:
输入:
请输入一个十进制整数: 85
输出:
二进制序列: 1010101
解释:
- 十进制数
85
转换为二进制为1010101
。 - 栈的后进先出的特性帮助我们从最后一个余数到第一个余数依次输出二进制位。
复杂度分析:
- 时间复杂度:O(log n),因为每次除法操作将十进制数缩小一半。
- 空间复杂度:O(log n),栈最多会存储
log n
个二进制位。
第四题
4.设G=(V,E)是一个带权的无向连通网,所有边的权均大于0。编写求解G的最小生成树算法(10分)。
Prim算法的C语言实现:
#include <stdio.h>
#include <limits.h>#define V 5 // 图中顶点的数量// 查找权值最小且不在最小生成树中的顶点
int minKey(int key[], int mstSet[]) {int min = INT_MAX, minIndex;for (int v = 0; v < V; v++) {if (mstSet[v] == 0 && key[v] < min) {min = key[v];minIndex = v;}}return minIndex;
}// 打印生成树
void printMST(int parent[], int graph[V][V]) {printf("边 权值\n");for (int i = 1; i < V; i++) {printf("%d - %d %d \n", parent[i], i, graph[i][parent[i]]);}
}// Prim算法计算最小生成树
void primMST(int graph[V][V]) {int parent[V]; // 用于存储生成树int key[V]; // 用于存储最小权值int mstSet[V]; // 记录哪些顶点已包含在最小生成树中// 初始化所有顶点的key值为无限大,mstSet值为falsefor (int i = 0; i < V; i++) {key[i] = INT_MAX;mstSet[i] = 0;}// 选择第一个顶点为根节点key[0] = 0;parent[0] = -1; // 第一个顶点没有父节点// 构造最小生成树for (int count = 0; count < V - 1; count++) {// 从未包括在最小生成树中的顶点选取key值最小的顶点int u = minKey(key, mstSet);// 将选取的顶点u包含到最小生成树中mstSet[u] = 1;// 更新相邻顶点的key值for (int v = 0; v < V; v++) {// graph[u][v]是u和v之间的边的权值if (graph[u][v] && mstSet[v] == 0 && graph[u][v] < key[v]) {parent[v] = u;key[v] = graph[u][v];}}}// 打印最小生成树printMST(parent, graph);
}int main() {// 定义图的邻接矩阵,0表示没有边int graph[V][V] = {{0, 2, 0, 6, 0},{2, 0, 3, 8, 5},{0, 3, 0, 0, 7},{6, 8, 0, 0, 9},{0, 5, 7, 9, 0}};// 计算并打印最小生成树primMST(graph);return 0;
}
代码说明:
minKey
函数:在未被包括在最小生成树中的顶点集合中,找到权值最小的顶点。primMST
函数:实现Prim算法。该函数通过维护两个数组key
和mstSet
,来选择每次未包括在生成树中的权值最小的顶点,最终构造最小生成树。printMST
函数:输出最小生成树的边和它们的权值。
复杂度分析:
- 时间复杂度:O(V²),其中V是顶点的数量。由于每次需要遍历所有顶点来选择最小的边,因此对于稠密图,时间复杂度为平方级别。
- 空间复杂度:O(V),需要额外的数组存储最小生成树信息、key值和mstSet。
第五题
5.定义三元组(x,y,z)(x、y、z均为正)的距离 D=|x-y|+|y-z|+|z-x|。给定3个 非空整数集合S1、S2和S3,按升序分别存储在3个数组中。请设计一个算法,计算 并输出所有可能的三元组(x,y,z)(xES1,yES2,zES3)中的最小距离。例如 S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为 2,相应 的三元组为(9,10,9)。给出算法的基本设计思想,并编程实现,要求算法在时间上 尽可能高效,给出算法的时间复杂度和空间复杂度(15分)。
算法设计思想:
给定三个有序数组 S1S1S1, S2S2S2, S3S3S3,目标是寻找最小的三元组距离。由于数组是有序的,我们可以利用双指针/三指针的方法来遍历这些数组,从中找到最小的三元组距离。
基本思想:
- 初始化三个指针分别指向三个数组的第一个元素。
- 计算当前指针对应的三元组距离。
- 通过移动值最小的那个指针来尝试缩小三元组的距离,直到其中一个指针到达数组末尾。
- 记录并更新最小距离和对应的三元组。
算法步骤:
- 设指针
i
,j
,k
分别指向数组S1
,S2
,S3
的第一个元素。 - 计算当前三元组的距离
D = |S1[i] - S2[j]| + |S2[j] - S3[k]| + |S3[k] - S1[i]|
。 - 如果当前距离比最小距离小,则更新最小距离并记录三元组。
- 通过移动当前最小元素的指针(即
S1[i]
,S2[j]
,S3[k]
中最小的那个)来尝试缩小距离。 - 当其中一个指针达到数组末尾时,停止遍历。
C语言实现
#include <stdio.h>
#include <stdlib.h>
#include <math.h> // 用于计算绝对值函数// 计算三元组的距离 D = |x - y| + |y - z| + |z - x|
int calculateDistance(int x, int y, int z) {return abs(x - y) + abs(y - z) + abs(z - x);
}// 查找最小的三元组距离
void findMinDistance(int S1[], int n1, int S2[], int n2, int S3[], int n3) {int i = 0, j = 0, k = 0;int minDistance = INT_MAX;int resultX = 0, resultY = 0, resultZ = 0;// 三指针遍历数组while (i < n1 && j < n2 && k < n3) {int x = S1[i], y = S2[j], z = S3[k];int currentDistance = calculateDistance(x, y, z);// 如果找到更小的距离,更新最小距离和对应的三元组if (currentDistance < minDistance) {minDistance = currentDistance;resultX = x;resultY = y;resultZ = z;}// 移动当前最小的指针,尝试缩小距离if (x <= y && x <= z) {i++;} else if (y <= x && y <= z) {j++;} else {k++;}}// 输出结果printf("最小距离为: %d\n", minDistance);printf("对应的三元组为: (%d, %d, %d)\n", resultX, resultY, resultZ);
}int main() {// 示例数据int S1[] = {-1, 0, 9};int S2[] = {-25, -10, 10, 11};int S3[] = {2, 9, 17, 30, 41};int n1 = sizeof(S1) / sizeof(S1[0]);int n2 = sizeof(S2) / sizeof(S2[0]);int n3 = sizeof(S3) / sizeof(S3[0]);// 查找最小三元组距离findMinDistance(S1, n1, S2, n2, S3, n3);return 0;
}
复杂度分析:
- 时间复杂度:O(n1 + n2 + n3),其中
n1
,n2
,n3
分别是三个数组的长度。由于我们只需要遍历每个数组一次,因此时间复杂度是线性的。 - 空间复杂度:O(1),只使用了常数个额外的变量来存储当前最小距离和三元组。
总结:
该算法通过使用三指针的方法,充分利用数组的有序性,使得每次迭代都能有效地缩小可能的距离范围,从而以线性时间复杂度找到最小距离的三元组。
1.设有一个三维数组 a[c1:d1,c2:d2,c3:d3],其中 ci:di 是第i维的边界(即第维的索引从ci到di),假设a[cl,c2,c3]的地址为a0,每个数据元素占L个存储单元。
(1)如果采用行优先存储方式,推导变量 a[i1,i2,i3]的地址。
(2)如果采用列优先存储方式,推导变量 a[i1,i2,i3]的地址。
题目分析:
设有一个三维数组 ( a[c1:d1, c2:d2, c3:d3] ),其中 ( c1:d1 ), ( c2:d2 ), ( c3:d3 ) 是每一维的边界,数组以行优先或列优先方式存储,且每个元素占 ( L ) 个存储单元。我们需要推导出数组元素 ( a[i1, i2, i3] ) 的地址。
给定信息:
- 数组维度:三维数组 ( a )
- 第一维索引范围 ( c1 \leq i1 \leq d1 )
- 第二维索引范围 ( c2 \leq i2 \leq d2 )
- 第三维索引范围 ( c3 \leq i3 \leq d3 )
- 基本地址:数组 ( a[c1, c2, c3] ) 的基地址为 ( a0 )
- 每个元素占 ( L ) 个存储单元
为了推导 ( a[i1, i2, i3] ) 的地址,需要基于存储方式分别进行推导。
1. 行优先存储方式
在行优先存储中,最右边的维度(第三维)先排布,依次到第二维、第一维。即:
- 第三维的元素相邻存储
- 当第三维遍历完后,移动到下一列(第二维)
- 当第二维遍历完后,移动到下一行(第一维)
地址计算公式推导:
假设 ( c3 \leq i3 \leq d3 ) 对应的是第三维,( c2 \leq i2 \leq d2 ) 对应的是第二维,( c1 \leq i1 \leq d1 ) 对应的是第一维。
-
第三维偏移量:
i3 - c3
该偏移量表示在第三维上的偏移位置。
-
第二维偏移量:
(i2 - c2) \times (d3 - c3 + 1)
第二维上的偏移位置,即跨过整个第三维的元素数。
-
第一维偏移量:
(i1 - c1) \times (d2 - c2 + 1) \times (d3 - c3 + 1)
第一维上的偏移位置,即跨过整个第二维和第三维的元素数。
综上,行优先存储时,变量 ( a[i1, i2, i3] ) 的地址 ( Addr(a[i1, i2, i3]) ) 为:
Addr(a[i1, i2, i3]) = a0 + [(i1 - c1) \times (d2 - c2 + 1) \times (d3 - c3 + 1) + (i2 - c2) \times (d3 - c3 + 1) + (i3 - c3)] \times L
2. 列优先存储方式
在列优先存储中,最左边的维度(第一维)先排布,依次到第二维、第三维。即:
- 第一维的元素相邻存储
- 当第一维遍历完后,移动到下一列(第二维)
- 当第二维遍历完后,移动到下一个块(第三维)
地址计算公式推导:
-
第一维偏移量:
i1 - c1
表示在第一维上的偏移位置。
-
第二维偏移量:
(i2 - c2) \times (d1 - c1 + 1)
表示跨过整个第一维的元素数。
-
第三维偏移量:
(i3 - c3) \times (d1 - c1 + 1) \times (d2 - c2 + 1)
表示跨过整个第一维和第二维的元素数。
综上,列优先存储时,变量 ( a[i1, i2, i3] ) 的地址 ( Addr(a[i1, i2, i3]) ) 为:
[
Addr(a[i1, i2, i3]) = a0 + [(i3 - c3) \times (d1 - c1 + 1) \times (d2 - c2 + 1) + (i2 - c2) \times (d1 - c1 + 1) + (i1 - c1)] \times L
]
总结:
-
行优先存储:
Addr(a[i1, i2, i3]) = a0 + [(i1 - c1) \times (d2 - c2 + 1) \times (d3 - c3 + 1) + (i2 - c2) \times (d3 - c3 + 1) + (i3 - c3)] \times L
-
列优先存储:
Addr(a[i1, i2, i3]) = a0 + [(i3 - c3) \times (d1 - c1 + 1) \times (d2 - c2 + 1) + (i2 - c2) \times (d1 - c1 + 1) + (i1 - c1)] \times L
4.已知一组关键字的序列为{45,26,80,9,62,38,56),通过快速排序算法对该序列进 行升序排序,每次选取待排序列首位置为轴值,请列出每次划分之后轴值的索引(索 引从0开始)以及此次划分后的关键字序列
我们使用快速排序(Quick Sort)对给定的关键字序列 {45, 26, 80, 9, 62, 38, 56}
进行升序排序,并且每次选取待排序列首位置为轴值。接下来,我将列出每次划分之后的轴值索引以及此次划分后的关键字序列。
初始序列: {45, 26, 80, 9, 62, 38, 56}
-
第一次划分:
- 选择第一个元素
45
作为轴值。 - 划分后序列为:
{9, 26, 38, 45, 62, 80, 56}
。 - 轴值索引:3。
- 选择第一个元素
-
第二次划分(左子序列:{9, 26, 38}):
- 选择第一个元素
9
作为轴值。 - 划分后序列为:
{9, 26, 38}
。 - 轴值索引:0(该子序列相对于原序列的全局索引为0)。
- 选择第一个元素
-
第三次划分(右子序列:{26, 38}):
- 选择第一个元素
26
作为轴值。 - 划分后序列为:
{26, 38}
。 - 轴值索引:1。
- 选择第一个元素
-
第四次划分(右子序列:{62, 80, 56}):
- 选择第一个元素
62
作为轴值。 - 划分后序列为:
{56, 62, 80}
。 - 轴值索引:5。
- 选择第一个元素
最终排序后的序列为:{9, 26, 38, 45, 56, 62, 80}
。
划分过程中轴值索引及关键字序列:
- 第一次划分:轴值索引 3,序列
{9, 26, 38, 45, 62, 80, 56}
。 - 第二次划分:轴值索引 0,序列
{9, 26, 38}
。 - 第三次划分:轴值索引 1,序列
{26, 38}
。 - 第四次划分:轴值索引 5,序列
{56, 62, 80}
。
(1) 画出散列表的示意图
散列函数为 H(K) = K MOD 11
,即关键字除以 11 的余数作为该关键字在散列表中的索引位置。使用拉链法处理冲突,因此每个槽位是一个链表。我们将关键字 {35, 67, 42, 21, 29, 86, 95, 47, 50, 36, 91}
依次插入到散列表中:
计算每个关键字的散列值:
- 35 MOD 11 = 2
- 67 MOD 11 = 1
- 42 MOD 11 = 9
- 21 MOD 11 = 10
- 29 MOD 11 = 7
- 86 MOD 11 = 9
- 95 MOD 11 = 7
- 47 MOD 11 = 3
- 50 MOD 11 = 6
- 36 MOD 11 = 3
- 91 MOD 11 = 3
按照散列值插入散列表并处理冲突:
索引 0: 空
索引 1: 67
索引 2: 35
索引 3: 91 → 36 → 47
索引 4: 空
索引 5: 空
索引 6: 50
索引 7: 95 → 29
索引 8: 空
索引 9: 86 → 42
索引 10: 21
(2) 计算查找成功时的平均查找长度
假设在散列表中的每个关键字被查找的概率相等,平均查找长度是每个槽位的链表长度的平均值。
散列表中每个链表的长度为:
- 索引 0: 0
- 索引 1: 1
- 索引 2: 1
- 索引 3: 3
- 索引 4: 0
- 索引 5: 0
- 索引 6: 1
- 索引 7: 2
- 索引 8: 0
- 索引 9: 2
- 索引 10: 1
平均查找长度的公式为:
平均查找长度=∑(链表长度×链表中每个关键字的查找长度)/总关键字数
在链表中的每个元素的查找长度为它在链表中的位置(从1开始计数)。计算每个链表中关键字的查找长度之和:
- 索引 1: 67 的查找长度 = 1
- 索引 2: 35 的查找长度 = 1
- 索引 3: 91 的查找长度 = 1,36 的查找长度 = 2,47 的查找长度 = 3,查找长度总和 = 1 + 2 + 3 = 6
- 索引 6: 50 的查找长度 = 1
- 索引 7: 95 的查找长度 = 1,29 的查找长度 = 2,查找长度总和 = 1 + 2 = 3
- 索引 9: 86 的查找长度 = 1,42 的查找长度 = 2,查找长度总和 = 1 + 2 = 3
- 索引 10: 21 的查找长度 = 1
查找长度总和 = 1 + 1 + 6 + 1 + 3 + 3 + 1 = 16
共有 11 个关键字,因此:
平均查找长度=∑(链表长度×链表中每个关键字的查找长度)/总关键字数
16/11 = 1.45
成功查找时的平均查找长度为 1.45。
程序片段:
x = 1
while x < n:x = x * 2
时间复杂度分析:
-
初始化:
x = 1
执行一次,时间为常数 ( O(1) )。 -
循环条件:
while x < n
,每次检查时,x
会翻倍。也就是说,循环的迭代次数是x
从 1 变为n
的次数。因为x
每次翻倍,循环次数可以表示为:
[
x = 2^k \quad \text{(第 k 次循环时)}
]
当 ( x \geq n ) 时,循环终止。因此,我们有:
[
2^k \geq n
]
取对数得:
[
k \geq \log_2 n
]
因此,循环执行了大约 ( O(\log n) ) 次。 -
每次循环的操作:在每次循环中,操作
x = x * 2
是常数时间操作 ( O(1) )。
综合分析,整个程序的时间复杂度为 ( O(\log n) )。
空间复杂度分析:
程序中只使用了两个变量:x
和 n
。每个变量只占用常数空间,因此空间复杂度为 ( O(1) )。
总结:
- 时间复杂度:( O(\log n) )
- 空间复杂度:( O(1) )
相关文章:
2024年808数据结构答案
1.已知带头结点单链表,H为头指针。设计一个算法,查找到链表的第m个结点(不包含头结点),并将元 素值为X的结点插入到该结点后,形成一个新的链表。 // 定义单链表节点结构 typedef struct Node {int data;struct Node* next; } Nod…...
Amazon Linux 2023 安装 Docker
Amazon Linux 2023 安装 Docker 1. 简介 在公司需要将代码部属到 Amazon Linux 2023 系统上时,去 Docker 官方文档里面看也没有针对该系统的部属文档。虽然有通用的 Linux 部属方案但不能应用包管理工具。 首先执行yum、dnf、apt,执行yum和dnf都有正确…...
接口测试(八)jmeter——参数化(CSV Data Set Config)
一、CSV Data Set Config 需求:批量注册5个用户,从CSV文件导入用户数据 1. 【线程组】–>【添加】–>【配置元件】–>【CSV Data Set Config】 2. 【CSV数据文件设置】设置如下 3. 设置线程数为5 4. 运行后查看响应结果...
GGD证明推导学习
GGD证明推导学习 这篇文章,建议先看相关的论文。这篇是我读证明的感悟,因此,不会论文的主体内容 首先,给出命题: DGI的sumary向量是一个常数 给定一个图: G { X ∈ R N D , A ∈ R N N } \mathcal{G…...
Flink难点和高频考点:Flink的反压产生原因、排查思路、优化措施和监控方法
目录 反压定义 反压影响 WebUI监控 Metrics指标 backPressureTimeMsPerSecond idleTimeMsPerSecond busyTimeMsPerSecond 反压可视化 资源优化 算子优化 数据倾斜优化 复杂算子优化 背压机制 反压预防 性能调优 内置工具 第三方工具 反压定义 在探讨Flink的性…...
Swarm - Agent 编排工具
文章目录 一、关于 Swarm(实验性、教育性)为什么选择蜂群文档 二、安装使用安装基本用法其它示例 三、Running Swarmclient.run()ArgumentsResponse字段 四、AgentFields Agent指令函数切换和更新上下文变量函数模式 流媒体评估工具 一、关于 Swarm&…...
使用Python中的jieba库进行简单情感分析
在自然语言处理(NLP)领域,情感分析是一项重要的任务,它可以帮助我们理解文本背后的情感倾向。本文将通过一个简单的例子来介绍如何使用Python的jieba库对中文文本进行基本的情感分析。 1. 环境准备 首先,确保已经安装…...
`pip` 下载速度慢
pip 下载速度慢(例如只有 50KB/s)可能由多个因素导致,以下是一些常见原因和解决方法: 1. 使用国内镜像源 国内访问 PyPI 服务器可能会较慢,您可以通过配置国内镜像源来提升下载速度。以下是一些常用的国内镜像源&…...
【WRF数据准备】基于GEE下载静态地理数据-叶面积指数LAI及绿色植被率Fpar
【WRF数据准备】基于GEE下载静态地理数据 准备:WRF所需静态地理数据(Static geographical data)数据范围说明基于GEE下载叶面积指数及绿色植被率GEE数据集介绍数据下载:LAI(叶面积指数)和Fpar(绿色植被率)数据处理:基于Python处理为单波段LAI数据参考GEE的介绍可参见另…...
网管平台(进阶篇):网管软件的配置方式
正确选择网管软件配置方式对于确保网络运行的高效性、稳定性和安全性至关重要,因为它直接影响到网络管理的灵活性、监控的深度以及故障响应的速度,从而保障整体网络环境的顺畅运行和业务连续性。下面我们就分别介绍一下。 一、集中式网络管理配置 在集…...
推荐系统中的AB测试
在现代互联网平台中,推荐系统起着至关重要的作用,无论是视频平台、社交网络还是电商网站,推荐系统都能够帮助用户找到最感兴趣的内容。为了不断优化推荐效果,AB测试(A/B Testing)作为评估新算法或功能改进的…...
.NET 8 Web API 中的身份验证和授权
本次介绍分为3篇文章: 1:.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3:.NET …...
Vue弹窗用也可以直接调用Js方法了
问题描述 在前端开发中,弹窗开发是一个不可避免的场景。然而,按照正常的逻辑,通过在template模板中先引用组件,然后通过v-if指令控制显隐,进而达到弹窗的效果。然而,这种方法却有一个严重的缺陷࿰…...
【c语言测试】
1. C语言中,逻辑“真”等价于( ) 题目分析: “逻辑真”在C语言中通常指的是非零数。 A. 大于零的数B. 大于零的整数C. 非零的数 (正确答案)D. 非零的整数 正确答案:C 2. 若定义了数组 int a[3][4];,则对…...
一种将树莓派打造为游戏机的方法——Lakka
什么是Lakka? Lakka是一款Linux发行版,轻量级的,可将小型计算机转变为一台复古游戏机。 图1-Lakka官网,见参考链接[1] Lakka是RetroArch和libretro生态系统下的官方操作系统,前者RetroArch是模拟器、游戏引擎和媒体播…...
如何在 MySQL 中创建一个完整的数据库备份?
在MySQL数据库中创建一个完整的数据库备份通常不是通过编程语言直接实现的,而是借助MySQL提供的命令行工具mysqldump来完成。 作为Java开发者,我们可以编写脚本来调用这些工具,从而实现自动化备份。 下面我们将详细介绍如何使用Java来调度m…...
京准电钟HR-901GB双GPS北斗卫星时钟服务器
京准电钟HR-901GB双GPS北斗卫星时钟服务器 京准电钟HR-901GB双GPS北斗卫星时钟服务器 作为国家电力系统最重要的设备之一,卫星时间同步装置随着电力行业的发展不断有了新的要求,从单纯的具备时间数据输出能力,发展到装置状态信息上送、对用时设备的对时质量进行监测,确保站点内…...
uniapp使用websocket
后端java websoket中的 onOpen 中。依赖注入为null 引用:https://blog.csdn.net/qq_63431773/article/details/132389555 https://blog.csdn.net/weixin_43961117/article/details/123989515 https://cloud.tencent.com/developer/article/2107954 https://blog.c…...
基于Pycharm和Django模型技术的数据迁移
1.配置数据库 在trip_server/settings.py中修改配置: 其格式可访问官网:Settings | Django documentation | Django 1.1 配置数据库 文件地址:trip_server/settings.py 配置前需要创建(NaviCat)个人数据库 "…...
乐尚代驾-----Day10(订单三)
hi UU 们!!!我又来跟辛辣!感谢你们的观看,话不多说!~ 司机到达代驾终点,代驾结束了。结束代驾之后, – 获取额外费用(高速费、停车费等) – 计算订单实际里程…...
105. 聚光源SpotLight
入门部分给大家介绍过平行光DirectionalLight、点光源PointLight、环境光AmbientLight,下面给大家介绍一个新的光源对象,也就是聚光源SpotLight。 创建聚光源SpotLight 聚光源可以认为是一个沿着特定方会逐渐发散的光源,照射范围在三维空间中构成一个圆…...
系统接口权限拦截器,获取用户信息存储
UserInfo 类 这是一个表示用户信息的 Java 类,使用了 Lombok 注解来简化代码编写。 import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString;import java.io.Serializable; import java.util.List;Data ToString EqualsAndHashCode public…...
Chromium HTML5 新的 Input 类型color 对应c++
一、Input 类型: color color 类型用在input字段主要用于选取颜色,如下所示: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body&…...
问:SQL中的通用函数及用法?
SQL函数是在SQL语句中使用的预定义的计算工具,可以对一列数据进行操作并返回一个单一的结果。这些函数大致可以分为两类:Aggregate函数和Scalar函数。Aggregate函数对一组值执行计算,并返回单个值,如求和、平均值、最大值和最小值…...
.NET Core WebApi第6讲:WebApi的前端怎么派人去拿数据?(区别MVC)
一、前端界面小基础 head:引入CSS, 引入JS是写在head里面。 body:眼睛肉眼能看到的用户展示的界面是写在body里面。 二、前端怎么派人去拿数据? 1、MVC:前后端不分离,MVC相比WebApi只是多了一个views的文件夹 &am…...
Chromium HTML5 新的 Input 类型date 对应c++
一、Input 类型: date date 类型允许你从一个日期选择器选择一个日期。 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php"…...
ZooKeeper的应用场景:深入探讨分布式系统中的多样化应用
Apache ZooKeeper 是一个开源的分布式协调服务,专为确保分布式系统中的高可用性和一致性而设计。在现代分布式应用程序中,协调、同步和管理是实现高效和可靠服务的关键部分,而 ZooKeeper 通过提供这些基础功能而成为许多分布式系统不可或缺的…...
【Vue3】第四篇
Vue3学习第四篇 01. 插槽Slots02. 插槽Slots(续集)03. 插槽Slots(再续集)04. 组件生命周期05. 生命周期应用06. 动态组件07. 组件保持存活08. 异步组件09. 依赖注入10. Vue应用 01. 插槽Slots 模板内容:html结构&#…...
Chromium HTML5 新的 Input 类型tel对应c++
一、Input 类型: tel <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>test</title> </head> <body><form action"demo-form.php">电话号码: <input type"tel" name…...
JVM—类加载器、双亲委派机制
目录 什么是类加载器 类加载器的分类 Bootstrap启动类加载器 通过启动类加载器加载用户jar包 Extension扩展类加载器和Application应用程序类加载器 通过扩展类加载器加载用户jar包 双亲委派机制 打破双亲委派机制 自定义类加载器 线程上下文类加载器 Osgi框架的类加…...
网站建设价格评审资料清单/如何找客户资源
在使用boost时,使用异步模式多线程. 程序退出时有一个坑. 就是存在一种情况, 当网络模块释放资源后, 一些收发函数还在做处理. 如果收发函数使用了网络模块里面的资源. 那么就会出现内存泄漏问题. 所以一个解决办法就是,在网络函数收发没有完全关闭之前,不要进行资源的清理. 也…...
wordpress系统和插件下载地址/北京网站优化合作
MySQL事物隔离级别事物基本要素概念说明事物隔离级别读未提交读提交可重复读串行化事物基本要素 原子性:事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前…...
最便宜做个网站多少钱/网上怎么找人去推广广告
许多人认为 10 月 5 日是 Linux 系统的周年纪念日,因为这是 Linux 在 1991 年首次对外公布的时间。不过,你可能不知道的是,早在 1991 年 8 月 25 日,当年还是大学生的 Linus Torvalds 就向 comp.os.minix 新闻组的人透露了由于 “…...
网站建设排名/附近学电脑培训班
人机交互部分的设计 控制驱动和数据管理部分的设计...
云南大永高速公路建设指挥部网站/沪深300指数怎么买
electron 图标制作聊天机器人越来越受欢迎。 Facebook正在致力于提供一个构建Messenger机器人的框架,该框架将允许企业所有者完全在Facebook的消息传递应用程序内部建立其客户支持。 订购披萨 ,安排您的下一次就诊时间,或者只是想为下一次旅行…...
视频网站是如何做的/会员制营销方案
2019独角兽企业重金招聘Python工程师标准>>> 1.ListView滑动方向判断 代码很简单,给mListView监听onScrollListener事件,然后在onScroll进行判断 //listView中第一项的索引private int mListViewFirstItem 0;//listView中第一项的在屏幕中的…...