当前位置: 首页 > news >正文

常用数据生成器

期望高度 \(O(\log)\)

/*
生成期望树高 O(logn) 级别的树
生成方法:钦定 1 为根,对于后续的节点 i,随机在 [1,i-1] 中选取一个点作为父亲
打乱方法:对所有点重新随机编号
*/
#include<random>
#include<iostream>
#include<algorithm>
#include<fstream>
#include<vector>
using namespace std;
typedef long long ll;
mt19937_64 getrnd(__builtin_ia32_rdtsc());
int rnd(ll l,ll r){return getrnd()%(r-l+1)+l;}
constexpr int N=1e7+10;
int n,p[N];
struct edge{int u,v;};
vector<edge> e;
void shuf(){for(int i=1;i<=n;i++) p[i]=i;shuffle(p+1,p+1+n,getrnd);for(edge &x:e){x.u=p[x.u];x.v=p[x.v];}
}
int main(){ofstream out("1.in");n=1e5;//节点数out<<n<<'\n';for(int i=2;i<=n;i++)e.push_back({i,rnd(1,i-1)});shuf();//随机打乱for(edge &x:e)out<<x.u<<' '<<x.v<<'\n';return 0;
}
/*
对于 n=1e5:
--以1为根:
----调用 shuf,平均树高在 20 左右浮动
----不调用 shuf,平均树高在 12 左右浮动
--随机选根:
----调用 shuf,平均树高在 22 左右浮动且方差较大
----不调用 shuf,平均树高在 20 左右浮动且方差较大
*/

期望高度 \(O(\sqrt n)\)

/*
生成期望树高 O(sqrtn) 级别的树
生成方法:随机生成一个 Prüfer 序列,根据此构造一棵树
打乱方法:对所有点重新随机编号
*/
#include<random>
#include<iostream>
#include<algorithm>
#include<fstream>
#include<queue>
using namespace std;
typedef long long ll;
mt19937_64 getrnd(__builtin_ia32_rdtsc());
int rnd(ll l,ll r){return getrnd()%(r-l+1)+l;}
constexpr int N=1e7+10;
int n,p[N],deg[N];
struct edge{int u,v;};
vector<int> prufer;
vector<edge> e;
priority_queue<int,vector<int>,greater<int>> leaf;
void prufer_decoding(){for(int i=1;i<=n;i++) deg[i]=1;for(int &v:prufer) ++deg[v];for(int i=1;i<=n;i++) if(deg[i]==1) leaf.push(i);for(int &v:prufer){int u=leaf.top();leaf.pop();e.push_back({u,v});--deg[u],--deg[v];if(deg[v]==1) leaf.push(v);}vector<int> remain;for(int i=1;i<=n;i++) if(deg[i]==1) remain.push_back(i);e.push_back({remain[0],remain[1]});
}
void shuf(){for(int i=1;i<=n;i++) p[i]=i;shuffle(p+1,p+1+n,getrnd);for(edge &x:e){x.u=p[x.u];x.v=p[x.v];}
}
int main(){ofstream out("1.in");n=1e5;//节点数out<<n<<'\n';for(int i=1;i<=n-2;i++) prufer.push_back(rnd(1,n));//随机生成 Prüfer 序列prufer_decoding();//根据 Prüfer 序列还原树shuf();//随机打乱for(edge &x:e)out<<x.u<<' '<<x.v<<'\n';return 0;
}
http://www.gsyq.cn/news/9726.html

相关文章:

  • 鸿蒙项目实战(十):web和js交互
  • 函数计算进化之路:AI 应用运行时的状态剖析
  • 详细介绍:Day20 K8S学习
  • opencv学习记录3
  • 统计分析神器 NCSS 2025 功能亮点+图文安装教程
  • Gentoo安装配置
  • 3 网络基础知识+web基础知识+部署Server
  • 简单理解java虚拟机
  • 洛谷题单指南-进阶数论-P1516 青蛙的约会
  • electron中的几个概念
  • 保护眼睛小程序
  • 001_string操作
  • hbase 面试题
  • mall项目学习笔记
  • 存储多边形网格的文件格式:OBJ、FBX、RenderMan、glTF、USD 等。
  • 实用指南:Unity 游戏引擎中 HDRP(高清渲染管线) 的材质着色器选择列表
  • 安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析
  • LAMP 环境一键部署脚本(Apache+MySQL+PHP) - 实践
  • 【ubuntu24.04】NFS机械硬盘无法挂载成功 - 实践
  • VTable-Sheet:重新定义Web电子表格的开源解决方案
  • Coolmuster Android Assistant:Windows架构下的Android设备管理专家
  • Linux服务器单网卡如何配置多个的IP地址?
  • day38大模型程序开发-GraphRAG实操
  • 深入解析MS12-020关键漏洞CVE-2012-0002:远程桌面协议的安全风险与缓解方案
  • 鸿蒙项目实战(九):get请求参数的处理
  • 20250806_信安一把梭_test
  • 专业 RAW 图像处理利器!DxO PhotoLab 让你的照片质感飙升
  • mysql时间转字符串,自定义格式将日期时间值转换为字符串
  • 其他与其它的区别
  • 实用指南:数据库造神计划第十七天---索引(2)