• 韦尼克区受损者如何说话


    1.关于hash

      刚开始学hash是为了比较字符串,后来用hash_table来存储大量元素、快速查找。最近想到的一个用法是,如果我们能给每个不同的元素对应一个的$p^i$的话,可以将一个集合转化为一个哈希值,从而快速比较两个集合是否相等。

      队友C:hash是不可撤销的!

      然而真的是这样吗?这个问题取决于我们决定$i$的方式。

      在字符串比较中,我们同时需要位置和内容信息,有了每个前缀的hash值,我们显然知道前面的每个位置对应的$i$,可以通过调整获得任意区间的hash值。虽然区间数($n^2$)复杂度往往是无法接受的,但是在需要考察的区间长度为定值时这个算法还是很优秀的。

      再看上面关于集合比较的问题,需要的信息只有内容,hash相当于一个模糊化的存储,只保留了集体信息而丢弃了单独元素的信息。虽然这种处理不支持查询某个元素是否在集合中,但是如果已知一个元素在集合中,我又知道它加入时对应的$i$,删除操作就是可行的。

      所以我们再考虑hash是否可撤销,就是看能否找到正确的$i$,以及能否准确、不过度地进行删除。

      我们一般印象中的hash往往有大素数、unsigned long long一类的特征。但是hash本质上就是一种“模糊化”的思想,把无法承受的存储、比对压缩到只剩下某些关键信息。其实求和、取max等等操作都可以是看作广义的hash,用一个结果来代表这个集合中我关注的特质。反向推想,一些难以处理的比较问题也可以尝试用hash解决,如两个集合是否相同。甚至抽取的特征也不一定涵盖了所有我需要的信息,余下就是在正确率和效率之间寻找平衡,神经网络等处理大规模数据的算法都有这种思想的体现。hash的正确概率,一是要看不同集合是否对应了不同的hash结果,二是要看这个结果是否能充分反映我关注的信息。

    eg:有n个点和m条无向边,边的长度均为1。问按顺序加边,加到多少条时开始存在从a到b的长度为5的点不重复路径,其中a和b是两个给定点。n、m<=1e5。

    2.博弈论哲学

      某些srs看起来一本正经胡说八道,实际上只会把博弈论推给队友,这是毋庸置疑的。

      反证法:假设这个状态必败,必然先手可以选择另一操作来把此处的选择留给后手,与必败矛盾。可能只存在于较大规模或具备一些基本特征的局面下,如至少有两个儿子的树节点等。小范围仍需手玩。

      分离法:通过简单操作把原局面分为无关的几部分,或者删除原局面的一部分,总之把游戏规模变小。

      Excel法:当队友C开始用Excel枚举每种局面的结果,他很快就会AC了。Excel确实是手动打表的好帮手,效率远胜纸质计算。

    3.笛卡尔模型化

      队友C:现在我们就得到一个经典的二维数点/三维偏序问题。

      把问题转化为一个数点问题、区间问题常常让事情变得简单。一对必须同时选取的数可以看作区间的左右端点、两种权值要求可以看作平面上的两维、元素的标号是数轴上的一维,如此种种。题目的要求本身没有改变,我们的思维却惯于快速应对这种形式。代码也可以有序地分成转化、处理两部分,甚至作证明、检查时可以完全分开考虑。

      笛卡尔坐标系中的模型总是更容易和数据结构建立联系。我们对数据结构的认识也不应该仅仅从维护信息、算法复杂度角度,还要考虑它有怎样的降维效果,它本身的特质适合怎样把我需要的答案分离、统计。处理信息的顺序,也即时间维度,也可以作为解决问题的辅助,有自然降维的功能。

    eg:n 个人,选白色、黑色各有一个权值,要使所有人选择后权值极差最小,并且有一些两个人不能选同色的限制。n<=1e5。

    4.数据范围骗局

      “操作数不超过m,m<=1e18”——但实际上按照题目规则,超过2n的操作都是没有意义的。

      “k是两整点之间距离的平方,k<=1e7”——可以拆成两数平方之和的数字在这个区间里并不多,可以预处理出所有组合方案,从而把两个维度分开,实现快速统计和查找。

      “强制在线,每次输入数据需要^opt”——若opt只能为0/1/2之类的小数字,^的结果十分有限,甚至可以根据最后答案倒推。

      题目中看似很大的输入数据,可能由于必须满足某些规则而变得十分有限。让出题人造数据时感到麻烦的限制,或许恰恰是选手的可乘之机。从出题人的角度考虑输入数据可能性,说不定能帮助发现题目性质。

    本文送给没有出现但是独自承担了绝大部分数学题的队友Y,以及另一位我十分希望但不能成为我的队友的同学。

  • 相关阅读:
    微信开发(5):公众号消息与事件推送处理(转)
    微信开发(4):微信第三方开放平台的搭建(转)
    微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(转)
    微信开发(2):微信js sdk分享朋友圈,朋友,获取config接口注入权限验证(转)
    微信开发(1) :网页授权获取用户的基本信息 实现微信登录(转)
    java实现创建临时文件然后在程序退出时自动删除文件(转)
    Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
    httpd2.4出现AH00025: configuration error
    apache启动失败
    软件工程中的反面模式(anti-pattern)
  • 原文地址:https://www.cnblogs.com/moyiii-/p/11663437.html
Copyright © 2020-2023  润新知