Hackerrank - The Grid Search
https://www.hackerrank.com/challenges/the-grid-search/forum
今天碰见这题,看见难度是Moderate,觉得应该能半小时内搞定。
读完题目发现是纯粹的一道子矩阵匹配问题,想想自己以前没做过,肯定能学到新算法,于是就开搞了。
于是上网搜到了Rabin-Karp算法,一种基于hashing的模式匹配算法。尽管连一维的我也没写过,但看了思想以后觉得推广到二维应该也不会很难。
于是有了以下代码,原理就是计算子矩阵的hash key。以hash key的比较代替了子矩阵的比较,这样可以首先排除掉hash key不相等的子矩阵。
对于hash key相等的,再用朴素方法判断子矩阵是否相等。
为什么最后还是要判断子矩阵是否相等呢?因为hash key可能存在碰撞,即使概率不大,为了保证正确性也需要进行检查。
学习Rabin-Karp算法的资料在此:
http://blog.sina.com.cn/s/blog_6a09b5a70100nhnr.html
思路虽简单,代码写起来却各种bug,最终我花了不下两个钟头才搞定。Hackerrank果然是给hacker玩的,我这水平在上面真是举步维艰。
不过,这么搞下来,倒是有了实实在在的收获,如果学习算法能一直保持这种节奏就好了。
下面是AC的代码,时空复杂度均为O(N ^ 2):
# 2D Rabin-Karp Algorithm
import re MOD = 10 ** 9 + 7 def get2DMatrix(n, m):
a = [[0 for j in xrange(m)] for i in xrange(n)]
return a def calcHash(a, nn, mm):
n = len(a)
m = len(a[0]) b = 1
for i in xrange(mm):
b = b * 10 % MOD
b2 = 1
for i in xrange(nn):
b2 = b2 * b % MOD h = get2DMatrix(n, m)
for i in xrange(n):
val = 0
for j in xrange(m):
val = (val * 10 + a[i][j]) % MOD
if j >= mm:
val = (val + a[i][j - mm] * (MOD - b)) % MOD
h[i][j] = val h2 = get2DMatrix(n, m)
h2[0] = h[0][:]
for i in xrange(1, n):
for j in xrange(m):
h2[i][j] = (h2[i - 1][j] * b + h[i][j]) % MOD
if i >= nn:
h2[i][j] = (h2[i][j] + h[i - nn][j] * (MOD - b2)) % MOD
return h, h2 def equal(a, p, ai, aj):
np = len(p)
mp = len(p[0])
for i in xrange(np):
for j in xrange(mp):
if a[ai + i][aj + j] != p[i][j]:
return False
return True def solve():
na, ma = map(int, re.split('\s+', raw_input().strip()))
a = []
for i in xrange(na):
a.append(map(int, list(raw_input().strip())))
np, mp = map(int, re.split('\s+', raw_input().strip()))
p = []
for i in xrange(np):
p.append(map(int, list(raw_input().strip())))
ha, h2a = calcHash(a, np, mp)
hp, h2p = calcHash(p, np, mp) for i in xrange(np - 1, na):
for j in xrange(mp - 1, ma):
if h2a[i][j] != h2p[np - 1][mp - 1]:
continue
if equal(a, p, i - np + 1, j - mp + 1):
print('YES')
return
print('NO') if __name__ == '__main__':
t = int(raw_input())
for ti in xrange(t):
solve()
Hackerrank - The Grid Search的更多相关文章
- Comparing randomized search and grid search for hyperparameter estimation
Comparing randomized search and grid search for hyperparameter estimation Compare randomized search ...
- 3.2. Grid Search: Searching for estimator parameters
3.2. Grid Search: Searching for estimator parameters Parameters that are not directly learnt within ...
- Grid search in the tidyverse
@drsimonj here to share a tidyverse method of grid search for optimizing a model's hyperparameters. ...
- How to Grid Search Hyperparameters for Deep Learning Models in Python With Keras
Hyperparameter optimization is a big part of deep learning. The reason is that neural networks are n ...
- Grid Search学习
转自:https://www.cnblogs.com/ysugyl/p/8711205.html Grid Search:一种调参手段:穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性 ...
- grid search 超参数寻优
http://scikit-learn.org/stable/modules/grid_search.html 1. 超参数寻优方法 gridsearchCV 和 RandomizedSearchC ...
- scikit-learn:3.2. Grid Search: Searching for estimator parameters
參考:http://scikit-learn.org/stable/modules/grid_search.html GridSearchCV通过(蛮力)搜索參数空间(參数的全部可能组合).寻找最好的 ...
- [转载]Grid Search
[转载]Grid Search 初学机器学习,之前的模型都是手动调参的,效果一般.同学和我说他用了一个叫grid search的方法.可以实现自动调参,顿时感觉非常高级.吃饭的时候想调参的话最差不过也 ...
- grid search
sklearn.metrics.make_scorer(score_func, greater_is_better=True, needs_proba=False, needs_threshold=F ...
随机推荐
- gluon实现softmax分类FashionMNIST
from mxnet import gluon,init from mxnet.gluon import loss as gloss,nn from mxnet.gluon import data a ...
- 贪心,Gene Assembly,ZOJ(1076)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=76 解题报告: 1.类似活动安排问题. 2.输出格式要注意. #inc ...
- iOS 适配安装包
每次自己需求都是去一顿搜索,所以就在此记录一下,免得以后再麻烦. 链接: https://pan.baidu.com/s/1zXEFlt94bz3O1e3GdtG92w 密码: rc4k 摘抄自:ht ...
- 【转】scp命令详解
先说下常用的情况: 两台机器IP分别为:A.104.238.161.75,B.43.224.34.73. 在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录 ...
- HttpHandler使用Session
继承自IHttpHandler的类要实现两个接口:ProcessRequest和IsReusable但还不能使用Session,要使用Session需要下面的步骤处理: 1.先引用System.Web ...
- 【luogu P2590 [ZJOI2008]树的统计】 题解
题目链接:https://www.luogu.org/problemnew/show/P2590 我想学树剖QAQ #include <cstdio> #include <cstri ...
- 我和我的广告前端代码(四):后台系统中,初尝vue、vue-cli
有一段都在重构之前文章<我和我的广告前端代码(三):一次重来的机会,必要的技术选型>中提到的广告前台展示项目,原有的基于页面的请求,改成了单广告位请求在这个过程中经历了好几次架构变更以及项 ...
- sql server 中数据库数据导入到另一个库中
这篇说了sql语句对于备份的数据库进行还原 ,如果数据量大了还是什么问题,发现我的数据丢失了一些,头疼 sql server 备份还原 下面使用的的数据导入来解决这个问题,因为数据量比较大,导出来的脚 ...
- android(eclipse)新手常见问题总结(一)
1:jdk无法更新 进入工具里面手动获取镜像资源 并且改为强制 2:报错:This version of the rendering library is more recent than you ...
- SpringBoot非官方教程 | 第十六篇:用restTemplate消费服务
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot11-restTemplate/ 本文出自方志朋的 ...