Algorithm(leetcode 算法题)

Palindrome Partitioning II

本周的回文字符串操作系列……哎……完全没能写出代码来,对自己非常失望了……

跟之前的某道看似复杂实则很快 AC 的题正好相反,这回的题一眼看上去不复杂,以为自己很快就会有思路了,没想到睡前躺在床上想了几次 + 坐车想了几个早上,居然都没有想出一个完整的、能付诸实践编码的方案。一开始的设想是从字符串开始遍历获得一系列小的回文串,再将其尽可能的合并成大的回文串,然后卡在了如何判断合并方案最优的问题上。后来进一步思考隐约想到了 DP 方案,但是脑内一团浆糊并没有明确 DP 的式子,最终还是没想清楚……

看了评论区的答案,非常简洁、漂亮的实现,完全对得起评论区里的赞赏。思路果然还是 DP……事实再一次雄辩的证明了我并没有真正掌握 DP 的精髓😂

算法基础不行果然不是一朝一夕能够解决的,之前几次做题顺利带来了可怕的错觉,还以为自己突飞猛进了……

还能怎样,慢慢来吧,至少在参考别人代码的过程中也在学会理解他人的思考方式、理解他人的编码逻辑,也算是有所收获了吧

class Solution(object):
	def minCut(self, s):
		length = len(s)
		res = [i-1 for i in range(length+1)]
		for i in range(0, length):
			j = 0
			while i+j < length and i-j >=0 and s[i+j] == s[i-j]:
				res[i+j+1] = min(res[i+j+1], res[i-j]+1)
				j += 1
			j = 0
			while i+j+1 < length and i-j >= 0 and s[i-j] == s[i+j+1]:
				res[i+j+2] = min(res[i+j+2], res[i-j]+1)
				j += 1
		return res[length]

Review(阅读并点评至少一篇技术文章)

9 Things You Need To Know About Mesh Networks

这篇主要介绍了网状网络(Mesh Network)结构的几大特点,最典型的为我们所熟知的完全(full)网状结构就是正五边形内嵌一个五角星,任意两点之间直接连通,部分(partial)网状结构在任一节点与网络整体连通的基础上上少一些边。理论上我们认为完全连通的结构上节点间通信延迟低,因此通常应用于主干网,而与主干网保持连接的边缘网络对延迟要求相对较低,通信量也较低,因此考虑到成本大多使用部分网状结构

提到边缘网络自然就能想到边缘计算。边缘计算又与如今热门的 AI、物联网等密不可分。AI 在传统不联网的电子设备上有很大的应用空间,这意味着如果想在这里落地 AI 应用我们首先需要考虑那些用途较为单一、简单的设备如何接入网络。关于这点作者提到了一些比较常见的基础思路,如基于容器的形式部署,在基础的操作系统之上加一层抽象等等

其实这种朴素的拓扑模型很早就已经存在了,直到今天才引 起人们的注意是因为早年网络节点之间必须是有线连接的,而如今无线连接技术已经逐步成熟了

总的来说感觉是中规中矩的一篇文章

Teach Yourself Programming in Ten Years

耗子叔推荐系列,说来这篇文章的标题是《用十年教自己编程,但是博文的实际链接结尾是 /21-days.html,可以说是对所谓 21 天教你学 Java/C++/Python 系列产品赤裸裸的讽刺了哈哈哈哈😂

如标题所言,文章基本上还是强调了在编程领域要成为专家离不开长年累月的积累,21 天是不可能的,21 年还差不多hhh。后面也提及了一些在长期学习发展过程中应当注重的事,比如与人结对编程、不要闭门造车、试着成为一个团队中最优秀或最差的一员等等,也是比较熟悉的一些字眼和说法了


Technique(技术技巧)

这次的技巧与 mysql 和命令行有关,依然是非常小的一个技巧,但是在日常 sql 的展示工作中非常有用,已经熟悉的老司机们不要打我

sql命令行美化显示

终端连接 mysql 数据库,使用 SELECT 等语句获取信息显示时,如果单行结果过长、终端窗口比较小,显示会非常混乱,如下图:

bad status

但是在 SELECT 等语句的末尾加上 \G 可以以比较优雅清晰的结构显示数据条目:

clear


Share(分享有观点和思考的技术文章)

The impact of AI at Microsoft

这篇 changelog 有两个嘉宾:

  • Azure 云计算的领头人 Corey Sanders
  • Microsoft 人工智能的副总裁 Steve Guggenheimer

Corey Sanders 为我们介绍了许多 Azure 云计算的相关技术。他首先从较高层面对 Azure 计算进行了定义:为你提供敏捷基础设施的、运行在核心虚拟机上的一系列服务。你可以在这之上启动虚拟机、运行你的服务。此外 Azure 还提供 Kubernetes 服务、Service Fabric(某种托管的 PaaS 服务)、Event Grid(某种基于事件的弹出型解决方案,从基于 serverless 的应用中得到的启发,与传统 polling 模型不同,完全只在需要 launch 的时候才 launch)等

在进一步讨论提供的云计算服务水平时,Corey Sanders 还介绍了(据说是)唯一一个拥有延迟服务水平协议的(latency SLA)NoSQL:Cosmos DB,它基于多模型,无论你的应用基于 Mongo 还是 Cassandra 等其他模型,提供的服务均有保障

话题转回到 Event Grid 与热门的 Serverless,Corey Sanders 认为真正意义上完整的 Serverless——即所谓的 FaaS 平台非常难以建成,因为在目前已有的基础(PaaS、IaaS 等)上设计出函数即服务级别的抽象非常困难,而且在这种情况下编程我们不像在本地一样有现成的工具可以 debug、设断点,同时由于编写一个完整 app 所需的函数链必然是复杂的,要提供恰当的调试环境、监控函数链状态的变化等等,这些都非常困难

第二部分主要还是围绕 AI 的一些基本理解展开,Steve Guggenheimer 认为在 AI 研究方面他们(researchers)未来的形态将会类似于 OpenAI 等组织:默默在背后进行相关研究,并将其成果不偏不倚的展示给大家。究其根本,将来 AI 时代到来,更多的外行人、日常生活与 AI 毫无关联的人们需要理解这与 AI 有关的一切,而由于不是与电脑共同成长起来的一代人,他们难以达到研究员们这样的理解层次,他们担忧自己的隐私数据、无法理解与 AI 相关的一切是如何运作的——甚至无法相信 AI 在日常生活中的应用是可能存在的。相对的,再看看比我们更年轻的一代人,他们甚至不需要教导,自然而然的就理解更多数据如何被使用、与网络计算机相关的事物如何运作、如何打开关闭各种需要不需要的功能等等

AI 的发展必然基于大量真实有意义的用户数据,而隐私(privacy)与安全(security)的权衡是个永恒的话题:人们都希望有自己的安全保障,希望获得更多更廉价甚至免费的服务,而作为代价必须放弃一部分自己的隐私。每个人对此的接受程度都不同,难以完美协调。针对此 Steve 举了个例子说明:例如将 AI 应用到垃圾邮件过滤上,大部分人的关注点还是在于" AI 的加入让我的工作生活更方便了么?",而不是垃圾邮件过滤意味着 AI 能读取我的私人邮件信息

AI 概念不仅是对生活方式的挑战,也是对人类社会基本道德体系的巨大挑战,因此 AI 的边界、AI 使用应当遵循的原则(还提到了医生从业需遵守的希波克拉底誓言)等都还需要业界巨头组织之间更多的讨论与思考

Steve 用一种编程人员都很熟悉的方式来表达了将来 AI 发挥巨大作用的形态:

Just give me the API call, I don't wanna go learn the math necessarily

以及:

It's gonna be infused into everything...It doesn't lend itself sell

在 AI 与人类"相处"的方式上,Steve 认为 AI 会为我们过滤信息,提高信息的精度、准确性,在我们需要的时候将信息流"喂"给我们,作为我们作出正确判断的依据,而不是代替我们作出决定,而与之相对的是 Bill Gates 的一个观点(此处并非原话):We all sort of go to computers and have to know how to use them. We're hitting the right point with AI when computers know how to work with us.(翻译成中文很难表达出含义,所以保留)

在各种高科技光速发展的时代,Steve 一句话很好的点出了计算的本质:

Computing is becoming more of a fabric, as opposed to a device.

这篇 changelog 虽然采访了两位嘉宾,但内容感觉也不丰富,个人并不觉得有多少触动人心的观点,感兴趣的朋友们也可以读一读


Comment(来自别人的评价与相关讨论)