Hash函数 + FloodFills

该博客主要介绍了如何利用哈希函数和FloodFill(DFS)算法来查找图像中的所有连通块。难点在于判断连通块是否为重复形状,通过将形状映射为唯一数来简化问题。文中提出使用hash(set) = sum(C(n, 2))作为哈希函数,计算连通块内两点间距离之和的平方根,以减少冲突。在比较哈希值时,由于浮点数精度问题,采用绝对差值小于1e-6的阈值进行判断。" 102884245,1334135,织梦dedecms后台批量上传与导出报表功能解析,"['织梦dedecms', 'Excel导入', 'Excel导出', '报表管理', '批量操作']
摘要由CSDN通过智能技术生成

1402. 星空之夜 - AcWing题库

思路:

大体思路就是找所有的连通块(FooldFills算法(DFS)) 

然后对于每个连通块,判断是否是重复出现的形状,这是个难点

我们不可能把一个形状旋转个90°或者180°之类的

那么我们最好的方法就是把一个形状对应成一个尽量唯一的数

就是哈希表了,我们把一个形状映射成一个数的好处就是这个形状无论是那个方向,我们都不需要考虑,我们只需要考虑这个块本身,而不需要考虑这个块在图中的位置之类。

对于哈希表,我们知道最重要的是哈希函数,哈希函数需要解决的一个核心问题就是处理冲突,这里的哈希函数直接背过就行了:hash(set)= sum(C(n,2)),意思就是在这个连通块set中任选两个点(有C(n,2))中选择,计算他们距离的总和,注意这个总和是要开平方的,不然引起冲突的概率会很大。

那么对于每一个连通块,我们求他的哈希值,然后保存下来,方便以后的连通块查询,然后转变成小写字母就行了,需要注意的是,在比较的时候,由于距离开根号了,是个浮点数,所以我们直接等于,浮点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值