ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

知识的核心与外壳

2022-05-20 05:31:07  阅读:207  来源: 互联网

标签:匹配 核心 知识 外壳 字串 abd


很早以前就开始意识到,很多知识是由“核心”和“外壳”两个部分组成的。

这里的“知识”可以是一个算法、一个概念或者一篇文章等。通常“核心”就是那个“灵感”、“灵机一动”或者是“新想法”。而“外壳”则是把想法运用的相关背景知识或者工具。

举个例子,生活中人们经常看一部剧看到一半被打断。当想继续看的时候需要找到上次看到的位置。这时候大多数人都知道要从中间开始找,看看有没有看过,再根据结果决定往回倒或者往前进,不断缩小范围直到找到之前中断的位置。而这和算法中的“二分查找”知识的“核心”是一样的。而学习“二分查找”的“外壳”包括了相关的计算机知识,例如线性结构和编程语言基础。

不同领域的知识或者生活经验,通常会有相同的“核心”。而“外壳”通常是获得知识的壁垒。比如大多数人知道怎么找剧的中断点,但不在计算机相关领域的人,通常不知道“二分查找”。

知识的“外壳”是一件很烦人的事。学习新知识的时候,“外壳”会让我们失去学习的耐心。“外壳”越复杂,越容易让人认为这个“知识”越“高深”,掌握的人就越少,即使它有一个非常简单的“核心”。

“外壳”对知识很重要,但是知识的“核心”才是它最有价值的部分。许多“知识”正是由于现存教材没有很好地剥离“外壳”,导致难学。很多好的文章、教程和博客,也正是因为知道如何剥离“外壳”而受到欢迎,比如我很喜欢的阮一峰、Matrix67等。

 

这里抛砖引玉,列举一些我所了解的知识和它的核心(持续更新在Notion列表,欢迎评论):

ACM的各种算法及其优化的核心:去除重复和不必要的计算。

各种搜索的核心:如何以特定顺序不重复不遗漏地扫一遍。

广度优先搜索(BFS):由近及远的顺序。

深度优先搜索(DFS):一条路走到头,走到死路再回头走另一条。

DLX:在DFS的基础上,不用“标记”来表示一条路走没走过,而是用链表来保存没走过的状态。优化的地方在于不用“看一下”是否被标记。

动态规划:以存代算,算过的结果存下来,需要的时候不用再算一遍。难点在于如何标识“这个问题已经算过”,以及计算的顺序。

Dijkstra最短路:本质上是BFS,由近及远找目标。

单调队列:干掉不可能成为答案的值,例如一个数组里想求每个数左边3个数中最大的那个,如果a[i]比a[i+1]小,那么a[i]永远不会是任何位置的答案,可以删掉。

O(nlgn)的最长不降子序列:核心就是单调队列。

KMP:重用字串自身的信息。方法是先对子串t预处理,建立一个数组存“下一跳”的信息,如果t[0...i-1]都匹配,t[i]不匹配,可以直接跳到下一个匹配位置。例如母串p是"abcdefg",字串t是"abd"。用"abc"和abd"匹配的时候,可发现c和d匹配不上,这时不需要再比较"bcd"和"abd"是否匹配,因为母串的"b"和字串的"a"必然不匹配。可以直接跳到"cde"和"abd"进行匹配。

Trie树:存很多字符串的时候合并相同前缀。

AC自动机:把KMP的思想扩展到Trie树上。

 

标签:匹配,核心,知识,外壳,字串,abd
来源: https://www.cnblogs.com/lzsz1212/p/16290987.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有