惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
G
Google Developers Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Engineering at Meta
Engineering at Meta
B
Blog
博客园_首页
量子位
博客园 - 叶小钗
L
LangChain Blog
T
The Blog of Author Tim Ferriss
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享
D
DataBreaches.Net
雷峰网
雷峰网
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
I
Intezer
H
Help Net Security
The Hacker News
The Hacker News
The Register - Security
The Register - Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AWS News Blog
AWS News Blog
V
V2EX
Microsoft Security Blog
Microsoft Security Blog
T
Tenable Blog
Spread Privacy
Spread Privacy
A
Arctic Wolf
P
Proofpoint News Feed
T
Threat Research - Cisco Blogs
Schneier on Security
Schneier on Security
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Last Watchdog
The Last Watchdog
Latest news
Latest news
T
Troy Hunt's Blog
L
LINUX DO - 热门话题

kok的笔记本

macOS 里 神秘的 kernel_task ,为什么一直在写入硬盘? 产品 node_modules 为什么总是这么大:一次从原理到实践的瘦身记录 谁来救救我的Mac存储空间-清理工具横评:付费vs免费,从界面到命令行 2023 读书推荐 写给播客嘉宾的录制说明书 在 Electron 中使用 Vue Devtools 几何原本中勾股定理的证明 Mac 安装软件时提示 已损坏,无法打开 应该怎么办 PegBoard 你的数字白板 少数派读者与作者的 NewsLetter 闲棋冷子-2-2021年我读过哪些很棒的书 闲棋冷子-1-相信你的身体,它不会骗你 修复 macOS 中 Cisco Anyconnect 报的奇怪Bug 我的 NAS 使用记录 Omniplan 入门教程 Hugo升级0.74记录 一年级产品经理需要掌握什么知识? 无籍之谈-3-和盖盖聊聊尼尔·盖曼与中外科幻 露营笔记-装备篇 无籍之谈-2-和鹏仔聊华尔街兴盛史,给小白投资者的一些建议 介绍一下《无籍之谈》 无籍之谈-1-和不土聊佛学,谈谈《一心走路》《僧侣与哲学家》 高达模型入门 - 工具整理 5 分钟了解 Sketch 的新特性 Tint - 色调 Hugo 主题移动端开发的一些心得 修复 macbook 键盘连击问题 在 Hugo 中使用 Open Graph 提升分享效果 选小米10 还是小米10 Pro? 利用 Python 批量合并 Excel 文件 为什么家国梦不好玩? 高雄85大楼 Mac优秀软件推荐-Itsycal 找到并和正确使用无版权资源 Excel 常用函数 一 无线吸尘器挑选指南 钢铁、蒸汽与 19 世纪 聊聊《铁道之旅》 如何挑选一个电脑电源? 有用的正则表达式 给psd瘦身 2019第二季度读书总结 组装 ITX 黑苹果主机 Intel CPU 挑选指南 常用的 Markdown 工具 2019第一季度读书总结 怎么用尺规作图画75°角? 在 Hugo 中使用 Sass 真正的换位思考-《爱的沟通》读书笔记 Hugo 中使用思维导图 反叛公司中的治理者和顾问玩法 如何搭配成为一个盐系男生? 反叛公司 Rebel Inc. 入门指南 如何评估需求,预估开发成本? 小米8、小米8SE、小米8青春版参数对比 微信外部链接内容管理规范分析 在售 iPhone 参数对比 给Hugo blog中增加一些插件 微信 MacOS 多开的一些实践 矩阵与线性变换的概念理解 尺规作图小习题 用 hugo 和 netlify 搭建blog 介绍我自己 瓜摊老板 Really? EDM邮件营销,你需要知道 果子沟大桥 喀赞其的马车 清晨的木梨硡 hexo 主题开发 青龙寺的狮子 语义化 html 标签 数模的基本思路和写作攻略 hexo blog 搭建 0.1,0.1^0.1,为什么数值是波动的? 智能手机之旅 老师和学生的博弈 这些使用抗生素的方式,你做的对吗? 炼金术与钢之炼金术师 kok的笔记本 kok的笔记本 中国长征运载火箭家族-PegBoard
用一个特殊方法解决同位词问题
kokdemo · 2014-05-04 · via kok的笔记本

前几天参加某公司的面试,被问了这么一个问题:

有一个字符串组叫a, a = [a, abc, apple, …, zoo]。 其中像stop post tops 这样的就叫做同位词。

这么看来同位词也就是组成相同,长短一样的两个字符串。

我事后查了一下,这个题是编程珠玑上的一道题目,书上给出的方案是这样的。

先将字符串内部按顺序排列,比如bac->abc,然后字符串间在排序,就可以找到同位词。

我当时给出的答案却是这样的:

对a,b,c~z进行加权,让a=1,b=2,c=4~z=2^25,然后每个字符串就可以算出来唯一的特征值。

后来给面试官解释这个原理的时候说的不是很好,于是自己后来想了一下,觉得这个思路还是可以发展一下的。

###为什么要这么定权值?

对于2^n的这个序列,很明显相邻两个数之间的差值为2^x,x为相邻两个数之间的较小值。

假设存在一个式子:

2^a+2^b=2^c+2^d      其中a,b,c,d互不相等。

这里让a>d,c>b,对这个式子做一个变化。

2^a-2^d=2^c-2^b

由刚才的推论我们知道,等号左边或者右边的结果,一定至少是2^x这个格式,或者是2^x1+2^x2……。

式中x取式中较小值,这里让x分别取d和b。得到

2^d=2^b

这明显与假设不符(就算让他们展开为x1+x2这种也不符),因此可以得到一个结论。

在2^n的序列中,不存在 2^a+2^b=2^c+2^d。

也就是说,我将a,b,c赋2^n的权值,不会存在a+b=c的情况,也不会存在a+b=c+d的情况,这对于我们标记一个独特的字符串十分有用。

当然你可能会说a+a=b,但是计算权值是有前提的,就是字符串要等长,这样这个问题就可以规避掉了。

###当然这个方法也是有问题的!! 细心的你估计马上就发现了,英文字母有26个,那么光计算z的权值就要2^25= 33554432 ,略大啊……如果有一个字符串是“zzzzzzz”,那还能不能愉快的计算了……

为了减少计算压力,我有这么几个方案:

  1. 将字母表中的前八位改为2^-8~2^0,计算的时候,先把小数点后提取出来,同时计算小数点后的权值和整数部分权值。

    至于为啥是前八位,因为2^-8=0.00390625,小数点后已经有八位了……你看之前2的25次方也才八位数而已,当然这个方案也只是一个试想……

  2. 其实2^n不就是指一个二进制数么!

    比如abc,按照之前的方案,其实就是111,ac就是101,这个值也是唯一的,那么我们完全可以把所有的字符串改为存储这样的数字啊!

    比如有abc和bca,他们的权都是111,两者and一下,如果是1,那就是同位词,如果不是那妥妥的就不是了。当然这个法子的前提依旧是等长,不然的话aaac就等于abc了……

仔细的想了一下,编程珠玑上用来给每个字符串求特征序列,在进行排序的思路和我的思路本质上是一样的!

因为究其根本,还是把一个乱序转化为一个特征,只不过它需要先内部排序,再外部比较,我的方案在内部排序的时候速度更快一些,一轮循环就可以结束。在空间占用上,两个方案差不多。

今天分享了一个好玩的题目,我感觉是蛮有意思的,也感谢你的阅读。