19、HashTable(哈希)、位图的实现和布隆过滤器的介绍
一、了解哈希【散列表】
1、哈希的结构
- 在STL中,HashTable是一个重要的底层数据结构, 无序关联容器包括unordered_set, unordered_map内部都是基于哈希表实现
- 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。
- 哈希函数:负责将任意大小的输入映射到固定大小的输出,即哈希值。
- 这个哈希值作用:是放在在数组中存储键值对的索引。
- 哈希冲突:由于哈希函数的映射不是一对一的,可能会出现两个不同的键映射到相同的索引,即冲突 。
- 解决冲突的方法:
- 链地址法
- 开发寻址法
- 双重哈希
2、哈希函数
- 定义:将键(任意类型)映射为固定大小的整数(哈希值),决定数据在哈希桶中的存储位置。
可能出现的情况
冲突情况 :将两个或两个以上的不同key映射到同一地址。
3、hash操作
- 插入
- 查找
4、哈希的负载因子【重点】
- 负载因子 = 存储的元素个数/数组长度
- 用来形容散列表的存储密度
- 负载因子越小,冲突越小,负载因子越大,冲突越大。
- 描述冲突的程度。
5、哈希冲突的解决方法
5.1、链地址法
方法一:拉链法 (链表法) 将具有相同的addr的key,可以用链表连接。但是负载因子要在合理范围内。
5.2、开发寻址法
方法二:开发寻址法
- 将所有的数据直接存储在哈希数组中。如果冲突就采用某种算法来改变位置。
- 算法有多种思路:
- 比如 i+1,i+2,i+3等等 或者 i^1, i ^ 2 , i ^3等等。但是他们会出现hash聚集,也就是近似值的hash值很接近,那么位置也接近。聚集的话,就会在一片区域内,查找,这片区域数据太多了,时间复杂从O(1)变O(n)。所以可以使用双重哈希解决。 但是负载因子要在合理范围内。
6、分布式一致性哈希
6.1、了解
- 一致性哈希通过环形哈希空间(Hash Ring) 和 虚拟节点(Virtual Nodes) 优化数据分布 。
- 解决传统哈希表在节点数量变化时导致的全局数据迁移问题(例如模运算哈希的 hash(key) % N,当 N 变化时所有数据需重新分布)。
- 一致性哈希,当节点增删时,仅影响环上相邻节点的数据,避免全局数据迁移。
6.2、哈希环
- 将节点和数据通过哈希函数映射到一个环形空间(通常范围为 0 ~ 2^32 - 1)
- 节点和数据的位置由哈希值决定。
每个数据项沿环顺时针查找最近的节点作为存储位置。
6.3、基本原理
- 第一步:
- 创建哈希环 。
- 将节点和数据通过哈希函数映射到一个环形空间
- 第二步:
- 将数据 a 、b 、c 通过哈希函数确定环上的位置,放上去 。
- 第三步
- 确定a、b、c映射到哪一个节点上 。
- 按顺时针顺序,将a、b、c映射到离它们最近的节点。
- 第四步
- 新增节点4,放在 1和2之间:仅需将环上相邻节点的部分数据迁移到新节点。
- 第五步
- 删除节点 4 ,把节点4上的数据 a 迁移到 节点2上
-
- 移除节点:该节点的数据顺时针迁移到下一个相邻节点。
- 移除节点:该节点的数据顺时针迁移到下一个相邻节点。
6.4、虚拟节点
- 问题:
- 若物理节点较少,数据可能分布不均【哈希偏移】, 如上图。
- 哈希偏移:
- 在一致性哈希中,如果节点数量较少,可能会导致数据分布不均匀,某些节点负载过高,而其他节点负载较低。
- 解决:
- 每个物理节点映射多个虚拟节点 。
- 数据最终存储在虚拟节点对应的物理节点。
虚拟节点的优点
- 数据分布均匀
- 虚拟节点将物理节点的负载分散到哈希环的多个位置,避免数据倾斜。
- 动态扩容
- 增加物理节点时,只需为其分配虚拟节点,数据迁移量较少。
- 容错性
- 删除物理节点时,其虚拟节点对应的数据会迁移到其他物理节点,系统仍然保持平衡。
7、哈希的代码
#include<cstddef>
#include<cstdio>
#include<cstdlib>
#include<sstream>
#include<vector>
#include<functional>
#include<utility>
#include<list>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
template<class Key,class Value,class Hash=hash<Key>>
class HashTable{class HashNode{public:Key key;Value value;//从key构造节点,Value使用默认构造explicit HashNode(const Key& key):key(key),value(){}//从key和value构造节点HashNode(const Key&key,const Value& value):key(key),value(value){}//比较运算符,只按key来比较bool operator==(const HashNode& other)const{return key==other.key;}bool operator!=(const HashNode& other)const{return key!=other.key;}bool operator<(const HashNode& other)const{return key<other.key;}bool operator>(const HashNode& other)const{return key>other.key;}bool operator==(const Key& key)const{return this->key==key;}//打印void print ()const{cout<<key<<" "<<value<<" ";}};private:using Bucket = list<HashNode>;//定义桶的类型为存储键的链表vector<Bucket> buckets; //存储所有桶的动态数组size_t tableSize; //哈希表的大小,即桶的数量size_t numElements; //哈希中的元素的数量float maxLoadFator = 0.75; //默认最大负载因子Hash hashFunction; //哈希函数对象//计算哈希值,并将其映射到桶的索引size_t hash(const Key& key)const{return hashFunction(key) % tableSize;}//当元素数量超过最大负载因子定义的容量时,增加桶的数量并重新分配所有键void rehash(size_t newSize){vector<Bucket> newBucket(newSize);//创建新的桶组for(Bucket& bucket:buckets){//遍历旧桶//遍历桶中的每一个键for(HashNode& hashNode:bucket){//因为这里是新的newSize计算,所以不能用hash(key)来求size_t newIndex=hashFunction(hashNode.key)%newSize;newBucket[newIndex].push_back(hashNode);//将键重新放入桶中}}buckets = move(newBucket);//使用移动语义更新桶数组tableSize = newSize;}
public://构造函数初始化哈希表HashTable(size_t size = 10,const Hash& hashFunc = Hash()):buckets(size),hashFunction(hashFunc),tableSize(size),numElements(0){}//插入键到哈希表中void insert(const Key&key,const Value& value){if((numElements+1)>maxLoadFator*tableSize){//检查是否需要重哈希//处理clear后再次插入元素时,tableSize = 0 的情况if(tableSize==0)tableSize = 1;rehash(tableSize*2);// 重哈希,桶数量翻倍}size_t index = hash(key); //计算键的索引list<HashNode>& bucket = buckets[index];//获取对应的桶//如果不在桶中,则添加到桶中if(find(bucket.begin(),bucket.end(),key)==bucket.end()){bucket.push_back(HashNode(key,value));++numElements;}}void insertKey(const Key&key){insert(key,Value{});}//从哈希表中移除键void erase(const Key& key){size_t index = hash(key);//计算键的索引auto & bucket = buckets[index];//获取对应的桶auto it = find(bucket.begin(),bucket.end(),key);//查找键if(it!=bucket.end()){bucket.erase(it);//删除键numElements--;//减少元素的数量}}//查找键是否在哈希表中Value* findKey(const Key& key){size_t index = hash(key);//计算键的索引auto & bucket = buckets[index];//获取对应的桶auto it = find(bucket.begin(),bucket.end(),key);//查找键if(it!=bucket.end()){return &it->value;}return nullptr;}//获取哈希表中的元素数量size_t size()const {return numElements;}//打印哈希表中的所有元素void print()const{for(size_t i = 0;i<buckets.size();++i){for(const HashNode& element:buckets[i]){element.print();}}cout<<endl;}void clear(){this->buckets.clear();this->numElements=0;this->tableSize = 0;}
};
int main(int argc, char const *argv[])
{//创建一个哈希表实例HashTable<int, int> hashTable;int n;cin>>n;getchar();string line;for(int i = 0;i<n;i++){getline(cin,line);istringstream iss(line);string command;iss>>command;int key;int value;if(command=="insert"){iss>>key>>value;hashTable.insert(key,value);}if(command == "erase"){if(hashTable.size()==0){continue;}iss>>key;hashTable.erase(key);}if(command=="find"){if(hashTable.size()==0){cout<<"not exist"<<endl;continue;}iss>>key;int* res = hashTable.findKey(key);if(res!=nullptr){cout<<*res<<endl;}else{cout<<"not exist"<<endl;}}if(command=="print"){if(hashTable.size()==0){cout<<"empty"<<endl;}else{hashTable.print();}}if(command=="size"){cout<<hashTable.size()<<endl;}if(command=="clear"){hashTable.clear();}}return 0;
}
二、位图
推荐文章
1、问题一
腾讯问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在40亿个数中。【哈希表:每个无符号整数占4字节。40亿占的是16G】
- 1 B是 8 bit 。
- 1GB = 1024MB。
- 1MB = 1024 KB 。
- 1KB = 1024B 。
- 40 亿个 无符号整数是 每个数 4字节。 就有 160 亿字节
- 160亿字节/1024/1024/1024 ≈ 14.9 GB
2、介绍
- 创建一段数组空间,用比特 1 和 0 来表示存在和不存在(1是存在,0是不能存在)。
3、实现位图的计算
void set(size_t x) {size_t index = x / 32; // 定位到哪个 intsize_t pos = x % 32; // 定位到 int 的哪一位bits[index] |= (1 << pos);//更新pos位置的 1
}
- 例如 x = 37:
- index = 37 / 32 = 1(第 2 个 int)
- 假设 bit[index]= 0000 0100
- pos = 37 % 32 = 5(第 5 位)
- 得pos = 0001 0000
- bits[1] |= (1 << 5) 将第 37 位设为 1
- 0000 0100 | 0001 000 = 0001 0100 。保持了原来的位的1,并更新了现在要改的位为 1
- index = 37 / 32 = 1(第 2 个 int)
3、操作
3.1、了解运算符
3.2、位图操作
4、位图的优缺点
- 查找很快
- 但是只能用于整型
5、代码实现
#include <cstddef>
#include<vector>
#include<iostream>
using namespace std;
namespace bit{class bitset{public:explicit bitset(size_t N){bits.resize(N/32+1,0);//如果是32的倍数,会多分配一个int}//设置位图void set(size_t x){size_t index = x/32;//算出x映射的位在第几个整型size_t pos = x%32;//算出x在这个整型的第几个位置bits[index]|= (1<<pos);//保留原来的1 ,设置现在需要 位 的1++num;}第pos个位置设置为0void reset(size_t x){size_t index = x/32;//算出x映射的位在第几个整型size_t pos = x%32;//算出x在这个整型的第几个位置bits[index] &= ~(1<<pos);//第pos个位置设置为0}//判断x在不在bool test(size_t x){size_t index = x/32;size_t pos = x%32;return bits[index]&(1<<pos);}private:vector<int> bits;size_t num;//个数};
};
void test_bitset(){using namespace bit;bitset bs(100);bs.set(99);bs.set(98);bs.set(97);for(size_t i =0;i<100;++i){cout<<"[%d]:%d\n"<<i<<static_cast<int>(bs.test(i))<<endl;}
}
int main(int argc, char const *argv[])
{test_bitset();return 0;
}
三、布隆过滤器(Bloom Filter)
1、了解
- 用于:只想知道key存在不存在,不想知道内容。(适合去重场景)
- 支持任意数据类型。
- 布隆过滤器将元素进行多个Hash算法计算,都存入位图中,查询时使用同样的Hash算法计算,对应当所有值都为true时,表示存在。这样就可以极大的提升位图的存储效率。
布隆过滤器也有致命的缺陷,即存在误判率,也称为假阳性率。
当数据量不断增大,位图中非true位置越来越少,很可能会出现未插入的数据,查询结果为true。
2、构成
- 哈希+位图
相关文章:
19、HashTable(哈希)、位图的实现和布隆过滤器的介绍
一、了解哈希【散列表】 1、哈希的结构 在STL中,HashTable是一个重要的底层数据结构, 无序关联容器包括unordered_set, unordered_map内部都是基于哈希表实现 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。哈希函数:负责将…...
鱼眼摄像头(一)多平面格式 单缓冲读取图像并显示
鱼眼摄像头(一)多平面格式 单缓冲读取图像并显示 1.摄像头格式 1. 单平面格式(Single Plane):各通道数据保存在同一个平面(缓冲),图像数据按行连续存储a. mjpeg,yuyv等…...
wpf UserControl 更换 自定义基类
在WPF中实现UserControl更换自定义基类的操作,需注意以下关键步骤及注意事项 实现步骤 创建自定义基类 新建继承自UserControl的基类(如CustomBaseUserControl),并添加通用逻辑: public class BaseUserControl: UserControl {// 添加共享逻辑(如事件处理、初始化…...
Linux C语言线程编程入门笔记
目录 开发环境准备 线程基础概念 进程与线程的关系 线程生命周期 创建线程 等待线程结束 线程函数和参数 互斥锁与共享资源保护 总结 开发环境准备 操作系统:以 Linux 为例(Ubuntu/CentOS 等主流发行版)。请确保系统已安装 GNU C 编…...
网络安全体系架构:核心框架与关键机制解析
以下是关于网络安全体系架构设计相关内容的详细介绍: 一、开放系统互联安全体系结构 开放系统互联(OSI)安全体系结构是一种基于分层模型的安全架构,旨在为开放系统之间的通信提供安全保障。它定义了安全服务、安全机制以及它们在…...
SecureCRT网络穿透/代理
场景 公司的办公VPN软件只有Windows系统版本,没有Macos系统版本,而日常开发过程中需要先登录VPN后,然后才能登录应用服务器。 目的:Macos系统在使用SecureCRT时,登录服务器,需要走Parallels Desktop进行网络…...
Typora+PicGo+Gitee图床配置教程 自动图片上传
配置步骤 #mermaid-svg-aPUbWs43XR5Rh7vf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-icon{fill:#552222;}#mermaid-svg-aPUbWs43XR5Rh7vf .error-text{fill:#552222;stroke:#552222;}#…...
基于vue框架的电子商城m8qu8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,商品类型,商品信息,商城公告 开题报告内容 基于Vue框架的电子商城开题报告 一、研究背景与意义 随着互联网技术的飞速发展,电子商务已成为全球商业领域的重要增长点。根据艾瑞咨询数据,中国网络购物用户规…...
线段树:数据结构中的超级英雄
在数据结构的世界里,线段树就像是一位超级英雄,能够高效地解决区间查询和更新问题。作为 C 算法小白,今天我就带大家一起认识这位超级英雄,揭开线段树的神秘面纱。 什么是线段树? 线段树是一种二叉树数据结构&#x…...
【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
麦科信获评CIAS2025金翎奖【半导体制造与封测领域优质供应商】
在苏州举办的2025CIAS动力能源与半导体创新发展大会上,深圳麦科信科技有限公司凭借在测试测量领域的技术积累,入选半导体制造与封测领域优质供应商榜单。本届大会以"新能源芯时代"为主题,汇集了来自功率半导体、第三代材料应用等领…...
开目新一代MOM:AI赋能高端制造的破局之道
导读 INTRODUCTION 在高端制造业智能化转型的深水区,企业正面临着个性化定制、多工艺场景、动态生产需求的敏捷响应以及传统MES柔性不足的考验……在此背景下,武汉开目信息技术股份有限公司(简称“开目软件”)正式发布新一代开目…...
wsl - install RabbiqMQ
下载erlang $ sudo apt -y install erlang 安装软件包 $ sudo apt -y install rabbitmq-server 修改配置文件 $ sudo vi /etc/rabbitmq/rabbitmq-env.conf # Defaults to rabbit. This can be useful if you want to run more than one node # per machine - RABBITMQ_NODENAME…...
力扣刷题Day 45:旋转图像(48)
1.题目描述 2.思路 只需要将左上1/4矩阵的元素挨个与右上1/4、右下1/4、左下1/4部分对应位置元素的值进行轮换即可。 3.代码(Python3) from math import ceilclass Solution:def rotate(self, matrix: List[List[int]]) -> None:n len(matrix)for…...
CentOS 7 系统下安装 OpenSSL 1.0.2k 依赖问题的处理
前面有提到过这个openssl的版本冲突问题,也是在这次恢复服务器时遇到的问题,我整理如下,供大家参考。小小一个软件的安装,挺坑的。 一、问题 项目运行环境需要,指定PHP7.0.9这个版本,但是系统版本与软件…...
【彻底卸载nginx并部署nginx1.22.1+ssl模块等】
文章目录 前言一、检查Nginx1.1 查看是否安装ssl模块 二、彻底卸载Nginx2.1 查看Nginx进程2.2 关闭Nginx服务2.3 查找Nginx安装目录2.4 彻底删除Nginx配置文件2.5 若之前Nginx设置开机自启,按下面方法删除2.6 使用yum方法彻底删除Nginx 三、部署Nginx1.22.1并配置ss…...
云上系统CC攻击如何进行检测与防御?
云上系统遭受CC攻击(Challenge Collapsar,一种针对应用层的DDoS攻击)时,检测与防御需结合流量分析、行为识别和技术手段,以下是核心方法: 一、检测方法 异常流量分析 监控请求量突增&#…...
python连接sqllite数据库工具类
背景 在数据集成业务中, 有很多token是有短效的到期时间的. 需要在调用多个接口的时候统一获取token ,因为我们集成平台的执行客户端是分步式的,集中保存平台大量客户的token在服务端有性能瓶颈.所以一般在客户端本地通过sqllite存储,故写了一个调用sqllite的工具类,在后续分享…...
leetcode - 双指针问题
文章目录 前言 题1 移动零: 思路: 参考代码: 题2 复写零: 思考: 参考代码: 题3 快乐数: 思考: 参考代码: 题4 盛最多水的容器: 思考:…...
Jsp技术入门指南【十一】SQL标签库
Jsp技术入门指南【十一】SQL标签库 前言一、SQL标签库概述1. 什么是SQL标签库,有什么用?2. SQL标签库怎么用? 二、常用SQL标签库详解3.1 sql:selDtataSource(配置数据源)3.2 sql:query(执行查询)…...
MySQL初阶:数据库约束和表的设计
数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。 数据库约束类型 1)not null 非空类型 :指定非空类型的列不能存储null,如果插入的数据是null便会报错。 2)de…...
2025年API安全防御全解析:应对DDoS与CC攻击的智能策略
2025年,API作为数字生态的核心枢纽,已成为攻击者的主要目标。DDoS攻击规模突破T级峰值,CC攻击则借助AI技术模拟真实用户行为,传统防御手段面临失效风险。如何在保障高并发业务稳定性的同时抵御复杂攻击?本文结合前沿技…...
【Bootstrap V4系列】学习入门教程之 组件-表单(Forms)高级用法
Bootstrap V4系列 学习入门教程之 组件-表单(Forms)高级用法 Layout 布局一、Form groups 表单组二、Form grid 表单网格2.1 Form row 表单行2.2 Horizontal form 水平形式表单2.3 Column sizing 列尺寸2.4 Auto-sizing 自动调整大小 三、Inline forms 内…...
Redis 主从复制集群搭建教程
目录 为什么要搭建 Redis 主从复制集群?搭建 Redis 主从复制集群前提条件步骤一:创建 Docker 网络步骤二:启动 Redis 主节点步骤三:启动 Redis 从节点步骤四:验证复制状态步骤五:使用 Python 连接 Redis 集…...
使用AES-CBC + HMAC-SHA256实现前后端请求安全验证
AES-CBC HMAC-SHA256 加密验证方案,下面是该方案二等 优点 与 缺点 表格,适用于文档、评审或技术选型说明。 ✅ 优点表格:AES-CBC HMAC-SHA256 加密验证方案 类别优点说明🔐 安全性使用 AES-CBC 对称加密使用 AES-128-CBC 是可…...
耳机插进电脑只有一边有声音怎么办 解决方法分享
当您沉浸在音乐或电影中时,如果突然发现耳机只有一边有声音,这无疑会破坏您的体验。本文将提供一系列检查和修复方法,帮助您找出并解决问题,让您的耳机恢复正常的立体声效果。 一、检查耳机连接是否正常 首先需要确认耳机与播放设…...
【物联网】基于树莓派的物联网开发【1】——初识树莓派
使用背景 物联网开发从0到1研究,以树莓派为基础 场景介绍 系统学习Linux、Python、WEB全栈、各种传感器和硬件 接下来程序猫将带领大家进军物联网世界,从0开始入门研究树莓派。 认识树莓派 正面图示: 1:树莓派简介 树莓派…...
AI生成虚假漏洞报告污染漏洞赏金平台
漏洞赏金计划遭遇AI伪造报告冲击 曾经因激励独立研究人员报告真实漏洞而备受赞誉的漏洞赏金计划,如今正面临AI生成虚假漏洞报告的重大挑战。这些伪造的漏洞报告在业内被称为"AI垃圾",不仅浪费维护人员的时间,更令人担忧的是&#…...
一种安全不泄漏、高效、免费的自动化脚本平台
在数字化转型加速的今天,自动化脚本工具已成为提升效率的重要助手。然而,用户在选择这类工具时,往往面临两大核心关切:安全性与成本。冰狐智能辅助(IceFox Intelligent Assistant)作为一款新兴的自动化脚本…...
MongoDB知识框架
简介:MongoDB 是一个基于分布式文件存储的数据库,属于 NoSQL 数据库产品,以下是其知识框架总结: 一、数据模型 文档:MongoDB 中的数据以 BSON(二进制形式的 JSON)格式存储在集合中,…...
2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
2025数维杯数学建模竞赛C题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、符合与定义说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...
深度学习 ———— 迁移学习
迁移学习原理 什么是迁移学习? 迁移学习利用在大规模数据集(如ImageNet)上预训练的模型,改装小数据集(如CIFAR-10)。优势: 减少训练时间:预训练模型已学习通用特征(如边…...
第十七章,反病毒---防病毒网管
基于杀毒软件的一种防御技术,是一种被动 的防御技术。 防病毒网关和主机上的杀毒软件在功能上互补和协作的关系。 病毒 --- 一般是感染或者附着在应用程序或文件中的;一般都是通过邮件或文件共享的方式进行传 输,从而对主机进行破坏 。 计…...
信赖域策略优化TRPO算法详解:python从零实现
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址)
目录 1. powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址) 2. 生成 EXE 文件时出现 "运行异常,请查看 Script Console" 的处理方法 处理步骤 3. powershell_bypass.cna 插件的功能及实际操作步骤 功能…...
从Dockerfile 构建docker镜像——保姆级教程
从Dockfile开始 dockerfile简介开始构建1、编辑dockerfile2、构建镜像3、拉取镜像4、推送到镜像仓库 镜像的优化1、优化的基本原则2、多阶段构建 dockerfile简介 开始构建 1、编辑dockerfile # 使用官方的 Python 3.8 镜像作为基础镜像 FROM python:3.8-slim# 设置工作目录 …...
Mac配置php开发环境(多PHP版本,安装Redis)
配置PHP开发环境 配置多版本PHP 因为开发需要,有时需要根据项目及时切换多个版本,除了使用Docker以外,常用的就是直接在mac配置PHP版本 使用 Homebrew Mac 可以通过 Homebrew 来安装或切换 PHP 版本: brew update brew insta…...
Quorum协议原理与应用详解
一、Quorum 协议核心原理 基本定义 Quorum 是一种基于 读写投票机制 的分布式一致性协议,通过权衡一致性(C)与可用性(A)实现数据冗余和最终一致性。其核心规则为: W(写成功副本数) …...
五一旅游潮涌:数字化如何驱动智慧旅游升级
文化和旅游部5月6日公布2025年“五一”假期文化和旅游市场情况,经文化和旅游部数据中心测算,假期5天,全国国内出游3.14亿人次,同比增长6.4%;国内游客出游总花费1802.69亿元,同比增长8.0%。在这组流动的数字…...
WPF 3D图形编程核心技术解析
一、三维坐标系系统 WPF采用右手坐标系系统,空间定位遵循: X 轴 → 右 Y 轴 → 上 Z 轴 → 观察方向 X轴 \rightarrow 右\quad Y轴 \rightarrow 上\quad Z轴 \rightarrow 观察方向 X轴→右Y轴→上Z轴→观察方向 三维坐标值表示为 ( x , y , z ) (x, y,…...
BLURRR剪辑软件免费版:创意剪辑,轻松上手,打造个性视频
BLURRR剪辑软件免费版是一款功能强大、简约易用且充满创意的视频剪辑软件。它集多种功能于一体,无论是新手还是资深用户,都能通过简单的操作剪辑出高质量、富有创意的视频。BLURRR不仅提供了丰富的剪辑工具,还划分了不同的内容模块࿰…...
TIME - MoE 模型代码 3.2——Time-MoE-main/time_moe/datasets/time_moe_dataset.py
源码:GitHub - Time-MoE/Time-MoE: [ICLR 2025 Spotlight] Official implementation of "Time-MoE: Billion-Scale Time Series Foundation Models with Mixture of Experts" 这段代码定义了一个用于时间序列数据处理的 TimeMoEDataset 类,支…...
解决SQL Server SQL语句性能问题(9)——正确使用索引
前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...
【论文阅读】FreePCA
FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 问题背景 核心挑战: 长视频生成通常依赖在短视频上训练的模型,但由于视频帧数增加会导致数…...
leetcode 383. Ransom Note
题目描述 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> table(26,0);for(char ch : magazine){table[ch-a];}for(char ch : ransomNote){table[ch-a]--;if(table[ch-a] < 0)return false;}return true;} };...
SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练
通过将AFormX的先进军用飞行模拟器与Varjo的行业领先的VR/XR硬件相结合,斯洛文尼亚武装部队正以经济高效、沉浸式的训练方式培训战斗机飞行员,以提高其战术准备和作战效率。 挑战:获得战术军事航空训练的机会有限 军事航空训练长期以来一直…...
基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践
随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…...
【Pandas】pandas DataFrame clip
Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.clip([lower, upper, axis, inplace])用于截…...
深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)
博主简介:努力学习的22级本科生一枚 🌟;探索AI算法,C,go语言的世界;在迷茫中寻找光芒🌸 博客主页:羊小猪~~-CSDN博客 内容简介:常见目标检测算法简介…...
嵌套路由~
### 作业 - App.vue vue <script setup></script> <template> <router-link to"/home">首页</router-link> <router-link to"/profile">个人资料</router-link> <router-link to"/posts"&g…...