思路:
大体思路就是找所有的连通块(FooldFills算法(DFS))
然后对于每个连通块,判断是否是重复出现的形状,这是个难点
我们不可能把一个形状旋转个90°或者180°之类的
那么我们最好的方法就是把一个形状对应成一个尽量唯一的数
就是哈希表了,我们把一个形状映射成一个数的好处就是这个形状无论是那个方向,我们都不需要考虑,我们只需要考虑这个块本身,而不需要考虑这个块在图中的位置之类。
对于哈希表,我们知道最重要的是哈希函数,哈希函数需要解决的一个核心问题就是处理冲突,这里的哈希函数直接背过就行了:hash(set)= sum(C(n,2)),意思就是在这个连通块set中任选两个点(有C(n,2))中选择,计算他们距离的总和,注意这个总和是要开平方的,不然引起冲突的概率会很大。
那么对于每一个连通块,我们求他的哈希值,然后保存下来,方便以后的连通块查询,然后转变成小写字母就行了,需要注意的是,在比较的时候,由于距离开根号了,是个浮点数,所以我们直接等于,浮点
Hash函数 + FloodFills
于 2022-03-31 21:58:46 首次发布
该博客主要介绍了如何利用哈希函数和FloodFill(DFS)算法来查找图像中的所有连通块。难点在于判断连通块是否为重复形状,通过将形状映射为唯一数来简化问题。文中提出使用hash(set) = sum(C(n, 2))作为哈希函数,计算连通块内两点间距离之和的平方根,以减少冲突。在比较哈希值时,由于浮点数精度问题,采用绝对差值小于1e-6的阈值进行判断。"
102884245,1334135,织梦dedecms后台批量上传与导出报表功能解析,"['织梦dedecms', 'Excel导入', 'Excel导出', '报表管理', '批量操作']
摘要由CSDN通过智能技术生成