Partition Refinement
今天613问我怎么做DFA最小化..呃..这个我怎么可能会做呢..
于是我就去学习了一点姿势,先把我Partition Refinement Data Structure的代码发上来好了..
我挺菜的代码重构了好几遍才找到正确的写法..可能是因为文化课智商下降了
#include<bits/stdc++.h>
using namespace std;
struct q{
vector<int>son;int tid;
q(int sz=0):tid(-1){if(sz)son.resize(sz);}
};
typedef pair<int,int>o;
struct p{
vector<q>z;
vector<o>b;
p(int t){
z.emplace_back(t);
b.resize(t+1);
for(int i=0;i<t;++i)
b[i+1]=o(0,i),z[0].son[i]=i+1;
}
void _reassign(q&a,int s){
q&t=z[a.tid];
int id=a.son[s];
if(s!=a.son.size()-1){
int idr=a.son[a.son.size()-1];
b[idr].second=s;
swap(a.son[s],a.son[a.son.size()-1]);
}a.son.pop_back();
b[id]=o(a.tid,t.son.size());
t.son.push_back(id);
}
vector<o>split(vector<int>t){
vector<o>q;
for(int v:t){
if(z[b[v].first].tid==-1){
q.emplace_back(b[v].first,z.size());
z[b[v].first].tid=z.size(),z.emplace_back();
}_reassign(z[b[v].first],b[v].second);
}for(o g:q)
z[g.first].tid=-1;
return q;
}
bool printset(q&e){
if(e.son.size()){
printf("{%d",e.son[0]);
for(int i=1,_=e.son.size();i<_;++i)
printf(",%d",e.son[i]);
puts("}");return 0;
}return 1;
}
void print(){
puts("{");
for(auto e:z)
putchar('\t'),printset(e);
puts("}");
}
};
int main(){
int n,m;scanf("%d %d",&n,&m);
p zz(n);
zz.print();
while(m--){
vector<int>ss;
int u;while(scanf("%d",&u),u)ss.push_back(u);
sort(ss.begin(),ss.end());
ss.erase(unique(ss.begin(),ss.end()),ss.end());
printf("Split with set(of size %zu):\n",ss.size());
for(int i:ss)
printf("%d ",i);
puts("");
auto q=zz.split(ss);
puts("Splits out:{");
for(auto i:q){
puts("\t{");
printf("\t\tDiv:"),zz.printset(zz.z[i.first ])?printf("\n"):0;
printf("\t\tRem:"),zz.printset(zz.z[i.second])?printf("\n"):0;
puts("\t}");
}puts("}\nNow set is like:");
zz.print();
}return 0;
}
哈哈想不到吧博客园,你把tab强行定为4格(你这是会引起公愤的),但是老子会转空格!你怕了吧哈哈哈..
Partition Refinement的更多相关文章
- Partition:增加分区
在关系型 DB中,分区表经常使用DateKey(int 数据类型)作为Partition Column,每个月的数据填充到同一个Partition中,由于在Fore-End呈现的报表大多数是基于Mon ...
- Partition:Partiton Scheme是否指定Next Used?
在SQL Server中,为Partition Scheme多次指定Next Used,不会出错,最后一次指定的FileGroup是Partition Scheme的Next Used,建议,在执行P ...
- Partition:分区切换(Switch)
在SQL Server中,对超级大表做数据归档,使用select和delete命令是十分耗费CPU时间和Disk空间的,SQL Server必须记录相应数量的事务日志,而使用switch操作归档分区表 ...
- sql 分组取最新的数据sqlserver巧用row_number和partition by分组取top数据
SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单 分组取TOP数据是T-SQL中的常用查询, 如学生信息管理系 ...
- Oracle Partition Outer Join 稠化报表
partition outer join实现将稀疏数据转为稠密数据,举例: with t as (select deptno, job, sum(sal) sum_sal from emp group ...
- SQLServer中Partition By 函数的使用
今天群里看到一个问题,在这里概述下:查询出不同分类下的最新记录.一看这不是很简单的么,要分类那就用Group By;要最新记录就用Order By呗.然后在自己的表中试着做出来: 首先呢我把表中的数据 ...
- [LeetCode] Partition Equal Subset Sum 相同子集和分割
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- [LeetCode] Partition List 划分链表
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- 快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现
很多笔试面试都喜欢考察快排,叫你手写一个也不是啥事.我很早之前就学了这个,对快速排序的过程是很清楚的.但是最近自己尝试手写,发现之前对算法的细节把握不够精准,很多地方甚至只是大脑中的一个映像,而没有理 ...
随机推荐
- Luogu [P1334] 瑞瑞的木板(手写堆)
其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...
- JS MarcoTasks MicroTasks
JS MarcoTasks MicroTasks 在JS的event loop中,有两种任务队列microtasks和macrotasks microtasks process.nextTick Pr ...
- 线段树和zkw线段树
作者作为一个蒟蒻,也是最近才自学了线段树,不对的地方欢迎大佬们评论,但是不要喷谢谢 好啦,我们就开始说说线段树吧 线段树是个支持区间操作和查询的东东,平时的话还是蛮实用的 下面以最基本的区间加以及查询 ...
- [BZOJ] 3875: [Ahoi2014&Jsoi2014]骑士游戏
设\(f[x]\)为彻底杀死\(x\)号怪兽的代价 有转移方程 \[ f[x]=min\{k[x],s[x]+\sum f[v]\} \] 其中\(v\)是\(x\)通过普通攻击分裂出的小怪兽 这个东 ...
- LeetCode948-令牌放置
问题:令牌放置 你的初始能量为 P,初始分数为 0,只有一包令牌. 令牌的值为 token[i],每个令牌最多只能使用一次,可能的两种使用方法如下: 如果你至少有 token[i] 点能量,可以将令牌 ...
- ZendFramework-2.4 源代码 - 关于服务管理器
// ------ 决定“服务管理器”配置的位置 ------ // 1.在模块的入口类/data/www/www.domain.com/www/module/Module1/Module.php中实 ...
- java util - MD5/AES/RSA快速调用工具
测试代码 package cn.java.security; import java.security.Key; import java.util.Base64; import org.junit.A ...
- Zookeeper协调服务系统·ELK日志管理系统简介
Zookeeper协调服务系统: 说明:它分布式系统中的协调服务系统,是Hadoop下的一个子项目,可提供的服务有:名字服务.配置服务.分布式同步.组服务等. 3个角色:Leaders.Follow. ...
- CRM第一篇:权限组件之权限控制
一.权限组件(1):一级菜单 二.权限组件(2):二级菜单 三.权限组件(3):默认选中非菜单(二级菜单) 四.权限组件(4):给动态菜单增加面包屑导航 五.权限组件(5):权限粒度控制到按钮 六.权 ...
- Linux下安装nginx,以及启动和停止
1.安装 安装nginx之前,首先确保系统已经安装了依赖:g++.gcc.openssl-devel.pcre-devel和zlib-devel软件 yum install gcc-c++ yum - ...