【算法】枚举
枚举
- 普通枚举
- 1.铺地毯
- 2.回文日期
- 3.扫雷
- 二进制枚举
- 1.子集
- 2.费解的开关
- 3.Even Parity
- 顾名思义,就是把所有情况全都罗列出来,然后找出符合题目要求的那一个。因此,枚举是一种纯暴力的算法。
- 一般情况下,枚举策略都是会超时的。此时要先根据题目的数据范围来判断暴力枚举是否可以通过。如果不行的话,就要进行优化(比如⼆分,双指针,前缀和与差分等)。使用枚举策略时,重点思考枚举的对象(枚举什么),枚举的顺序(正序还是逆序),以及枚举的方式(普通枚举?递归枚举?⼆进制枚举)
普通枚举
1.铺地毯
P1003 [NOIP2011 提高组] 铺地毯
解法:枚举
枚举所有的地毯,判断哪一个地毯能够覆盖 (x, y) 这个位置。优化枚举方式:
- 因为我们要的是最后⼀个能够覆盖 (x, y) 位置的地毯,那么逆序枚举所有的地毯,第一次找到覆
盖 (x, y) 位置的就是结果。 - 如果从前往后枚举,我们至少要把所有地毯都枚举完,才能知道最终结果。
#include<iostream>
using namespace std;const int N = 1e4 + 10;int n;
int a[N], b[N], g[N], k[N];
int x, y;int find()
{//从后往前枚举所有地毯 for(int i = n; i >= 1; i--){//判断是否覆盖if(x >= a[i] && y >= b[i] && x <= a[i] + g[i] && y <= b[i] + k[i]){return i;}}return -1;
}int main()
{cin >> n;for(int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> g[i] >> k[i];cin >> x >> y;cout << find() << endl; return 0;
}
2.回文日期
P2010 [NOIP2016 普及组] 回文日期
解法:枚举
- 枚举0~99999999之间的所有数字,判断是否回文,若回文,求出对应的月日,判断是否合法。
- 枚举0~9999之间的年份,求出构成回文形式的月日,判断是否合法。
- 枚举所有月日的组合,然后根据回文的特性推出年份,然后比较这个数字时候在题目给定的区间内。
#include<iostream>
using namespace std;int x, y;
int day[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main()
{cin >> x >> y;int ret = 0;//枚举所有月日for(int i = 1; i <= 12; i++){for(int j = 1; j <= day[i]; j++){int k = (j % 10) * 1000 + (j / 10) * 100 + (i % 10) * 10 + (i / 10);int num = k * 10000 + i * 100 + j;if(x <= num && num <= y) ret++; }}cout << ret << endl;return 0;
}
3.扫雷
P2327 [SCOI2005] 扫雷
解法:枚举
- 我们发现,当第一列中的第一行的小格子的状态确定了之后,其实后续行的状态也跟着固定下来。而第一列中的第一行的状态要么有雷,要么没有雷,所以最终的答案就在 0, 1, 2 中。
- 因此,我们枚举第一列中的第一行的两种状态:要么有雷,要么没雷。然后依次计算剩下行的值,看看是否能满足所给的数据。
#include<iostream>
using namespace std;const int N = 1e4 + 10;int n;
int a[N], b[N];//第一个位置不放地雷
int check1()
{a[1] = 0;for(int i = 2; i <= n + 1; i++){a[i] = b[i - 1] - a[i - 1] - a[i - 2];if(a[i] < 0 || a[i] > 1) return 0;}if(a[n + 1] == 0) return 1;return 0;
}//第一个位置放地雷
int check2()
{a[1] = 1;for(int i = 2; i <= n + 1; i++){a[i] = b[i - 1] - a[i - 1] - a[i - 2];if(a[i] < 0 || a[i] > 1) return 0;}if(a[n + 1] == 0) return 1;return 0;
}int main()
{cin >> n;for(int i = 1; i <= n; i++) cin >> b[i];int ret = 0;ret += check1(); ret += check2();cout << ret << endl;
}
二进制枚举
二进制枚举:用一个数的二进制中的 0/1 表示两种状态,从而达到枚举各种情况。
1.子集
子集
解法:枚举
- 枚举 0 ~ 1<<(n - 1) 之间所有的数,每一个数的二进制中 1 的位置可以表示数组中对应位置选上该元素。那么 0 ~ 1<<(n - 1) 就可以枚举出原数组中所有的子集。
- 根据枚举的每一个状态,选出原数组中对应的元素,然后存在结果数组中。
class Solution
{
public:vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ret;int n = nums.size();//枚举所有的状态for(int st = 0; st < (1 << n); st++){vector<int> tmp;// 根据 st 的状态,还原出要选的数 for(int i = 0; i < n; i++){if((st >> i) & 1) tmp.push_back(nums[i]);}ret.push_back(tmp);}return ret;}
};
2.费解的开关
P10449 费解的开关
解法:枚举
在这个「拉灯游戏」中我们可以得到「三个性质」:
- 每一个开关「最多只会被按一次」。因为按两次及以上是没有意义的,只会让按的次数增多;
- 按每一个开关的「先后顺序」不会影响最后的结果。可以想象,当所有开关按的方式确定之后,每一个开关被改变的「次数」也就被确定了,也就是说不管你先按谁后按谁,改变的次数是固定的,那么结果就是固定的。
- 如果「确定了第一行」的按法,后续行的按法就也固定下来了(这里可以参考《扫雷》这道题,有相似点)。因为第一行的按法固定之后,第二行的按法需要把第一行「全部点亮」。当第二行的按法确定之后,第三行的按法需要把第二行「全部点亮」…,依次类推,后续行的按法就都确定下来了。
有了这三个性质,那么我们的核心思路就是:
- 暴力「枚举」第一行的所有按法;
- 然后根据第一行的按法,计算出当前行以及下一行被按之后的结果。
- 根据上一行被按了之后的状态,确定当前行的按法,然后重复 2 操作。
- 最后判断最后一行是否全部都亮。
接下来考虑每一步如何「优美」的实现。为了方便起见,我们读取原数据的时候把所有的 1 当成 0 ,把所有的 0 当成 1,这样题目要求的全亮,就变成全灭,后续各种操作都非常舒服。
- 读取数据时,我们直接用「⼆进制」存每一行的状态:比如:00101,对应的就是 5 。这样我们就可以用「位运算」快速实现一些操作,方便之处会在后续算法原理中体现。
- 枚举第一行所有的按法:枚举 1 ~ (1 << 5) 之间所有的数,如果二进制表示中第 i 位是 1 就表示第一行的第 i 位被按。
- 如何计算某个状态下,一共按了多少次:相当于计算二进制表示中 1 的个数。
- 如何优美的根据当前行的按法 push,得到当前行 a[i] 以及下一行 a[i+1] 被按 push 了之后的状态:
a. 当前行:被按的位置会影响「当前位置」以及「左右两个位置」的状态,如果状态是 0 会被变成 1,如果状态是 1 会被变成 0,正好是 xˆ1 之后的结果。又因为会改变「当前位置」以及「左右两个位置」,所以 a[i] 的最终状态就是:a[i] = a[i] ˆ push ˆ (push >> 1) ˆ (push << 1)。其中 push << 1 有可能会让第 5 位变成 1,这一位是一个「非法」的位置,有可能影响后续判断,我们要「截断高位」:
(push << 1) ˆ ((1 << 5) − 1)。最终:a[i] = a[i] ˆ push ˆ (push >> 1) ˆ ((push << 1) ˆ ((1 << 5) − 1))。
b. 下一行:当前行的 push 只会对下一行「对应的位置」做修改:a[i + 1] = a[i + 1] ˆ push。发现没,使用「⼆进制」表示存状态之后,改变的时候只使用「位运算」即可,不然还要写 for 循环来改变每一个位置的值。 - 求出当前行被按了之后的结果,如何求出下一行的按法:巨简单,当前行怎么亮,下一行就怎么按,这样就可以把当前行亮的位置暗灭:nextpush = a[i]。注意此时的 a[i] 是被按了之后的状态。
- 判断最后一行是否全灭:判断 a[4] == 0 即可,我们开头「反着存储」的优势就体现出来了。
#include <iostream>
#include <cstring>
using namespace std;const int N = 10;int n = 5;
int a[N]; //用二进制表示灯的存储状态
int t[N]; //备份 a 数组//计算 x 的二进制表示中一共有多少个1
int calc(int x)
{int cnt = 0;while(x){cnt++;x &= x - 1;}return cnt;
} int main()
{int T; cin >> T;while(T--){//多组测试时,一定要注意清空之前的数据 memset(a, 0, sizeof(a));for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){char ch; cin >> ch;//存相反的:亮当做灭,灭当做亮if(ch == '0') a[i] |= 1 << j;}}int ret = 0x3f3f3f3f; //统计所有合法的按法中的最小值 //枚举第一行所有可能的按法for(int st = 0; st < (1 << n); st++){memcpy(t, a, sizeof(a));int push = st; //当前行的按法 int cnt = 0; //统计当前按法下一共按了多少次//依次计算后序行的结果和按法 for(int i = 0; i < n; i++){cnt += calc(push);t[i] = t[i] ^ push ^ (push << 1) ^ (push >> 1); //修改当前行被按后的结果 t[i] &= (1 << n) - 1; //清空影响 t[i + 1] ^= push; //修改下一行的状态 push = t[i]; //更新下一行的按法 }if(t[n - 1] == 0) ret = min(ret, cnt); //若最后一行全灭:说明此按法可以做到全灭 } if(ret > 6) cout << -1 << endl;else cout << ret << endl;}return 0;
}
3.Even Parity
Even Parity
解法:模拟
- 每一个 0 如果变成 1,只「变一次」。
- 当第一行的「最终状态」确定之后,第二行的「最终状态」也会确定。所以我们可以「暴力枚举」第一行的最终状态,在这个最终状态「合法」的前提下,「递推」出来第二行的状态,「以此类推」下去。
考虑以下几个问题:
3. 如何枚举第一行所有的「最终状态」st:枚举 0 ~ (1 << n) 之间所有的数,「每一个数」就是第一行的最终状态。
4. 由于本题只能 0 变 1,所以我们还要「判断」每一行的最终状态 y「是否合法」:很简单,比较初始状态 x 以及最终状态 y 中「二进制表示的每一位」,如果是 0 变 1,就是「合法」操作,计数;如果是 1 变 0,「非法」操作,直接「跳出本次循环」,枚举第一行的下一个状态。
5. 当前行的最终状态 a[i] 确定之后,如何「递推」下一行的最终状态 a[i + 1]:规则是当前位置「上下左右」1 的个数之和是「偶数」,根据「异或」运算「无进位相加」的特性,正好就是上下左右位置「异或」的结果是 0 。那么下一行对应位置的状态就是「当前行右移一位」与「当前行左移一位」与「上一行对应位置」异或的结果:a[i + 1] = (a[i] >> 1) ˆ (a[i] << 1) ˆ a[i − 1]。其中 a[i] << 1 会造成不合法的位置是 1 的情况,注意「高位截断」:(a[i] << 1) & ((1 << n) - 1)。
#include <iostream>
#include <cstring>
using namespace std;const int N = 20;int n;
int a[N]; //用二进制存储状态
int t[N]; //备份//判断 x->y 是否合法
//返回 -1,表示不合法
//其余的数,表示合法,并且表示 0->1 的次数
int calc(int x, int y)
{int sum = 0;for (int i = 0; i < n; i++){if (((x >> i) & 1) == 0 && ((y >> i) & 1) == 1) sum++;if (((x >> i) & 1) == 1 && ((y >> i) & 1) == 0) return -1;}return sum;
}int solve()
{int ret = 0x3f3f3f3f; //记录最小的改变次数 //枚举第一行的最终状态for (int st = 0; st < (1 << n); st++){memcpy(t, a, sizeof a);int change = st;int cnt = 0; //统计 0->1 的次数bool flag = 1;for (int i = 1; i <= n; i++){//先判断 change 是否合法int c = calc(t[i], change);if (c == -1){flag = 0;break;}cnt += c; //累加次数t[i] = change; //当前行的最终状态change = t[i - 1] ^ (t[i] << 1) ^ (t[i] >> 1); //计算下一行的最终状态change &= (1 << n) - 1; //消除影响}if (flag) ret = min(ret, cnt);}if (ret == 0x3f3f3f3f) return -1;else return ret;
}int main()
{int T; cin >> T;for (int k = 1; k <= T; k++){//多组测试数据,记得清空memset(a, 0, sizeof a);cin >> n;for (int i = 1; i <= n; i++) //避免越界访问 {for (int j = 0; j < n; j++){int x; cin >> x;if (x) a[i] |= 1 << j;}}printf("Case %d: %d\n", k, solve());}return 0;
}
相关文章:
【算法】枚举
枚举 普通枚举1.铺地毯2.回文日期3.扫雷 二进制枚举1.子集2.费解的开关3.Even Parity 顾名思义,就是把所有情况全都罗列出来,然后找出符合题目要求的那一个。因此,枚举是一种纯暴力的算法。一般情况下,枚举策略都是会超时的。此时…...
【C++】构造函数与析构函数
写在前面 构造函数与析构函数都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 构造函数和析构函数的知识需要建立在有初步类与对象的基础之上的,关于类与对象不才在前面笔记中有详细的介绍:点我…...
力扣刷题汇总
动态规划 1 . 最大子序和 (Maximum Subarray Sum) Leetcode 53. 最大子数组和 经典dp 问题描述:给定一个整数数组,求其中和最大的连续子数组的和。 状态定义:dp[i] 表示以第 i 个元素结尾的最大子序和。 2 . 最长公共子序列 (Longest Commo…...
Ansible自动化运维:基础与实践
在当今的IT运维领域,Ansible作为一款强大的自动化运维工具,正发挥着日益重要的作用。本文将详细介绍Ansible的相关知识,包括其作用、特点、安装配置以及常用模块的使用方法,旨在帮助读者快速上手并熟练运用Ansible进行自动化运维工…...
微信小程序在使用页面栈保存页面信息时,如何避免数据丢失?
微信小程序在使用页面栈保存页面信息时避免数据丢失的方法: 一、使用全局变量存储关键数据: 定义一个全局变量,例如在 app.js 中,用于存储页面的重要信息。在页面的 onHide 或 onUnload 生命周期中,将需要保存的数据…...
我国无人机新增实名登记110.3 万架,累计完成飞行2666万小时
据央视新闻从中国民航局了解到,2024 年我国全年新增通航企业 145 家、通用机场 26 个,颁发无人驾驶航空器型号合格证 6 个、新增实名登记无人机 110.3 万架,无人机运营单位总数超过 2 万家,累计完成无人机飞行 2666 万小时&#x…...
vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建
1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…...
C语言:-三子棋游戏代码:分支-循环-数组-函数集合
思路分析: 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数,使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…...
前端调试遇到的无限debugger的原理与绕过
背景 debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,只要遇到它,JavaScript 的执行便会在此处中断,进入调试模式。有了 debugger 这个关键字,我们就可以非常方便地对 JavaScript 代码进行调试,比如使用 JavaScript Hook 时,我们可以加入 debugger 关键字…...
Java负载均衡
Java中的负载均衡原理是指通过合理分配网络请求或计算任务的方式,将工作负载分配到多个服务器、处理单元或服务实例上,从而提高系统的性能、可扩展性和可用性。负载均衡不仅可以分散请求压力,还能增强系统的容错能力,避免单点故障…...
spark,读取和写入同一张表问题
读取a表,写入a表 1.写入的是分区表,不报错 2.读取上来之后,创建为临时视图temp,然后先写入a表,再使用temp,就会报错 解决办法:可以先使用temp,再写入a表 3.写入的不是分区表&…...
用gpg和sha256验证ubuntu.iso
链接 https://ubuntu.com/tutorials/how-to-verify-ubuntuhttps://releases.ubuntu.com/jammy/ 本文是2的简明版 sha256sum介绍 sha256sum -c SHA256SUMS 2>&1这段脚本的作用是验证文件的 SHA-256 校验和。具体来说,命令的各个部分含义如下: …...
HIVE技术
本文章基于黑马免费资料编写。 hive介绍 简介 hive架构 hive需要启动的配置 执行元数据库初始化命令 使用hive必须启动的服务 ./schematool -initSchema -dbType mysql -verbos启动 Hive 创建一个 hive 的日志文件夹 mkdir /export/server/hive/logs启动元数据管理服务 n…...
我的世界-与门、或门、非门等基本门电路实现
一、红石比较器 (1) 红石比较器结构 红石比较器有前端单火把、后端双火把以及两个侧端 其中后端和侧端是输入信号,前端是输出信号 (2) 红石比较器的两种模式 比较模式 前端火把未点亮时处于比较模式 侧端>后端 → 0 当任一侧端强度大于后端强度时,输出…...
GPU 硬件原理架构(一)
这张费米管线架构图能看懂了,整个GPU的架构基本就熟了。市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白一了个基本上就可以触类旁通了。下面这张图信息量很大,可以结合博客GPU 英伟达GPU架构回…...
[Qt]窗口-QMainWindow类-QMenuBar、QToolBar、QStatusBar、QDockWidget控件
目录 1.QMainWindow类介绍 2.菜单栏-QMenuBar控件 创建菜单栏 添加菜单和菜单选项 triggered信号 设置快捷键 添加分割线 添加图标 使用案例 3.工具栏-QToolBar控件 使用介绍 设置停靠位置 设置浮动属性 设置移动属性 使用案例 4.状态栏-QStatusBar控件 状…...
Linux命令行工具-使用方法
参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…...
HTML中如何保留字符串的空白符和换行符号的效果
有个字符串 储值门店{{thing3.DATA}}\n储值卡号{{character_string1.DATA}}\n储值金额{{amount4.DATA}}\n当前余额{{amount5.DATA}}\n储值时间{{time2.DATA}} , HTML中想要保留 \n的换行效果的有下面3种方法: 1、style 中 设置 white-space: pre-lin…...
ASP.NET Core WebApi接口IP限流实践技术指南
在当今的Web开发中,接口的安全性和稳定性至关重要。面对恶意请求或频繁访问,我们需要采取有效的措施来保护我们的WebApi接口。IP限流是一种常见的技术手段,通过对来自同一IP地址的请求进行频率控制,可以有效地防止恶意攻击和过度消…...
SparkSQL数据模型综合实践
文章目录 1. 实战概述2. 实战步骤2.1 创建数据集2.2 创建数据模型对象2.2.1 创建常量2.2.2 创建加载数据方法2.2.3 创建过滤年龄方法2.2.4 创建平均薪水方法2.2.5 创建主方法2.2.6 查看完整代码 2.3 运行程序,查看结果 3. 实战小结 1. 实战概述 在本次实战中&#…...
C++实现设计模式---外观模式 (Facade)
外观模式 (Facade) 外观模式 是一种结构型设计模式,为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口,使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口,屏蔽子系统的内部细节。 …...
计算机网络 (43)万维网WWW
前言 万维网(World Wide Web,WWW)是Internet上集文本、声音、动画、视频等多种媒体信息于一身的信息服务系统。 一、基本概念与组成 定义:万维网是一个分布式、联机式的信息存储空间,通过超文本链接的方式将分散的信息…...
C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等
在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…...
Docker Desktop 中安装 MySQL 并开启远程访问的详细教程
是在 Docker Desktop 中安装 MySQL 并开启远程访问的详细教程: 一、安装 MySQL 容器 拉取 MySQL 镜像: docker pull mysql:latest这将从 Docker Hub 上拉取最新版本的 MySQL 镜像。如果你想使用特定版本的 MySQL,可以将 latest 替换为具体…...
沸点 | 聚焦嬴图Cloud V2.1:具备水平可扩展性+深度计算的云原生嬴图动力站!
近日,嬴图正式推出嬴图Cloud V2.1,此次发布专注于提供无与伦比的用户体验,包括具有水平可扩展性的嬴图Powerhouse的一键部署、具有灵活定制功能的管理控制台、VPC / 专用链接等,旨在满足用户不断变化需求的各项前沿功能࿰…...
西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】
AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…...
EMQX集群搭建
集群搭建 通过使用 EMQX 集群,您可以在一个或多个节点发生故障时仍然保持集群运行,从而享受到容错和高可用性的好处。 尽管没有严格的上限,但建议在 EMQX 开源版中将集群大小限制为三个节点。仅使用核心类型节点时,较小的集群规模…...
【Flink系列】10. Flink SQL
10. Flink SQL Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理(…...
Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入
前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理,那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场,本次也是根据这两个靶场来分析代码,两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …...
TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
注:本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层,有个 FLAGS 字段,这个字段有…...
OSPF的LSA的学习研究
OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa࿰…...
C# OpenCV机器视觉:转速测量
在一个看似平常却又暗藏神秘能量的日子里,阿杰正在他那充满科技感的实验室里,对着一堆奇奇怪怪的仪器发呆。突然,手机铃声如一道凌厉的剑气划破寂静,原来是工厂的赵厂长打来的紧急电话:“阿杰啊,咱们工厂新…...
wireshark 网络分析工具
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一、网络截获数据包的基础1、以太网…...
XXL-JOB 加入 GitCode:推动分布式任务调度进阶发展
在当今企业数字化转型加速的时代背景下,任务调度在保障系统高效运行方面的关键作用日益凸显。XXL-JOB 正式加入 GitCode,成为 G-Star 优秀毕业项目,为分布式任务调度领域带来了新的契机与活力,助力企业应对复杂多变的业务需求。 X…...
Java Web开发进阶——WebSocket与实时通信
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,广泛应用于需要实时数据交换的应用程序中。它能够实现服务器与客户端之间的双向通信,避免了传统 HTTP 请求/响应的延迟。结合 Spring Boot,开发实时通信应用变得更加高效与简便。 1. …...
解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题
解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one(青柠学术插件)的时候,使用插件跳转obsidian中的对应笔记,出现上图情况。(错误中提到的…...
晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...
分布式数据存储基础与HDFS操作实践(副本)
以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …...
Rust:指针 `*T` 和引用 `T`的区别
在 Rust 编程语言中,*T 和 &T 是两种不同类型的指针,它们各自代表了不同的内存访问方式和所有权模型。 *T(原始指针或裸指针): *T 是一个原始指针(也称为裸指针或裸引用),它可以…...
【2025最新版】PCL点云处理算法汇总(C++长期更新版)
博客长期更新,最近一次更新时间为:2025年1月17日。 pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);目录 配库常用数据免费下载链接一、点云滤波1、常用滤波器2、采样滤波3、裁剪滤波 二、KD树与八叉树1、KD树2、八叉树 三、点云配准粗配准精…...
换了城市ip属地会变吗?为什么换了城市IP属地不变
当我们跨越城市的界限,从一个地方迁移到另一个地方时,许多日常使用的网络服务和应用程序都会感知到这种变化,其中一个显著的现象就是IP属地的变化。IP属地,即IP地址所在的地理位置信息,它通常与互联网服务提供商&#…...
mysql 如何快速删除表数据
在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...
Windows安装Jenkins——及修改主目录、配置简体中文、修改插件源
一、简介 Jenkinshttps://www.jenkins.io/zh/ Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。 二、Windows安装配置Jenkins2.479 2.1、J...
【机器学习:二十二、机器学习项目开发的技巧】
机器学习项目开发的技巧 机器学习项目的开发不仅仅依赖于算法的选择和模型的调优,还需要良好的项目管理技巧和方法论。以下是机器学习项目开发中的关键技巧: 明确需求:在项目启动之前,明确问题定义和业务目标。例如,…...
用python实战excel和word自动化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现excel和word自动化--批量处理 前言--需求快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格…...
Conda的一些常用命令
以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...
ESP8266 AP模式 网页配网 arduino ide
ESP8266的AP配网,可以自行配置网络,一个简单的demo,文档最后有所有的代码,已经测试通过. 查看SPIFFS文件管理系统中的文件 账号密码是否存在,如不存在进入AP配网,如存在进入wifi连接模式 // 检查Wi-Fi凭据if (isWiFiConfigured()) {Serial.println("找到Wi-Fi凭据&#…...
《AI与鸿蒙Next:建筑设计可视化的革新力量》
在建筑设计领域,可视化对于呈现设计理念、与客户沟通以及指导施工等环节都至关重要。人工智能与鸿蒙Next图形渲染技术的发展,为建筑设计可视化带来了前所未有的变革与机遇。 人工智能在建筑设计可视化中的作用 快速生成设计方案:人工智能可以…...
Edge Scdn是什么,它如何提升网站安全性与访问速度?
随着网络攻击的日益猖獗,尤其是分布式拒绝服务(DDoS)攻击的频繁发生,如何保护网站的安全性并确保用户的访问体验变得极为重要。Edge Scdn(内容分发网络)作为一种新兴的技术方案,逐渐被越来越多的…...
[Collection与数据结构] PriorityQueue与堆
1. 优先级队列 1.1 概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然…...