编程之美——算法与数据结构
文章平均质量分 96
以基本数据结构和算法为起点,探寻日常生活以及计算机系统中的应用场景,体验算法之美!
小王曾是少年
通信工程本硕 for NJU ;
《Intelligent Passive Eavesdropping in Massive MIMO-OFDM Systems via Reinforcement Learning》IEEE WCL 作者;
申请国家发明专利2项;
淘天集团后端开发;
有事尽量私信
展开
-
【蓝桥杯】KMP算法难以理解只能硬背?东哥这个思路让你10分钟彻底掌握
KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,说实话,有点复杂。这种高级且常用的算法经常会在各种竞赛 / 面试场景中出现,先给大家说一个真实的例子吧,在我当初校招面试华为sp时,面试官就让我当场写一个KMP算法,大致的题目如下:这个算法是一个比较奇葩的存在,业内流行一句话,当你第一遍没学会掌握kmp时,之后再看就会耗费成倍的精力。不幸的是我第一遍没掌握这个算法,所以当时我是直接把模板给背诵了下来,以一种非正常的方式通过了面试。之后复原创 2021-12-15 16:29:37 · 1503 阅读 · 30 评论 -
并查集——解决连接问题的神器
1 定义并查集是一种很不一样的树形结构,由子节点指向父节点。常被用来回答连接问题(Connectivity Problem),比如下图中求左上角的点和右下角的点是否相连,我们难以用肉眼观察出结果,需要借助这样的数据结构来帮助我们解决。网络是个抽象的概念:社交软件的用户,购物网站的商品信息,交通系统等等都可以抽象成网络中的节点,所以实际中的很多问题都可以借助这个强大的数据结构来解决。除了解决连接问题,并查集还是数学中集合这一概念的具体实现,并查集的“并”字其实也是数学集合求...原创 2020-09-18 16:55:55 · 369 阅读 · 0 评论 -
一篇详尽的HashMap整理(面试看这一篇就够了)
1 HashMap总结HashMap 是 Map 接口的实现,允许key的值为null,但是是一个非线程安全的容器,如果想构造线程安全的 Map 使用 ConcurrentHashMap。 也可以用Collections.synchronizedMap(new HashMap)来创建一个线程安全的Map。HashMap 无法保证内部存储的键值对的有序性所以是无序的。HashMap 的底层数据结构是数组(又称桶) + 链表。遍历 HashMap 需要的时间损耗由桶的数量 和 键...原创 2020-09-08 16:10:00 · 1314 阅读 · 2 评论 -
用动态规划思想简化理解KMP算法
8月29日leetcode每日一题是字符串匹配问题,涉及到著名的KMP算法,很早之前就听说过它的鼎鼎大名,查询了点资料现做总结如下,尽量做得简介明了,以供大家参考。KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,说实话,有点复杂。约定:pat表示模式串,长度为M,txt表示文本串,长度N为N。KMP 算法是在txt中查找子串pat,如果存在,返回这个子串的起始索引,否则返回 -1。目前大部分的解析应该是:对pat进行一顿操作之后生成一个n.原创 2020-08-30 21:24:23 · 436 阅读 · 0 评论 -
动手实现一个java中的散列表(HashTable)(文末福利)
1 散列散列表(HashTable),我们平时也会称它为“哈希表”,是一种经常使用的数据结构,也是典型的空间换时间的思路的体现。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。假如我们有 19 名选手参加学校运动会。为了方便记录成绩,每个选手胸前都会贴上自己的参赛号码,用 6 位数字来表示。比如 051167,其中,前两位 05 表示年级,中间两位 11 表示班级,最后两位是依次递增的编号 1 到 19。尽管不能直接把编号作为数组下标,.原创 2020-08-27 15:39:23 · 530 阅读 · 0 评论 -
最近最少使用(LRU)缓存淘汰算法
先抛个结论:其实链表就可以,但我们可以用哈希表来优化。想了一下,目前阶段的博客还是要从基础说起,以免对同学们带来不好的体验。不急,慢慢来。概述来自一段百度百科对缓存的介绍:缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。缓存的大小有限,当缓存空间被占满时,我们需要一个策略..原创 2020-08-20 21:32:25 · 1220 阅读 · 0 评论 -
追根溯源——回溯算法
最近几天在leetcode上刷到排列组合这一类的问题多了起来..基本的解决思路就是“回溯算法”,乍一看感觉非常高大上,其实也就是披着多叉树遍历外套的暴力破解法,做多了就会发现这就像循环遍历数组一样,套路固定,故准备总结在此,以供交流探讨。模板举个例子:输出一串数字[1,2,3]的全排列[1,2,3],[1,3,2],[2,1,3,],[2,3,1],[3,1,2],[3,2,1]。这个问题交给人类来解决的话肯定是先固定第一位为 1,然后第二位可以是 2,那么第三位只能是 3;然后可以把.原创 2020-08-12 16:14:12 · 3053 阅读 · 0 评论 -
java可视化,实现走迷宫小游戏(包含随机迷宫生成、BFS自动寻找迷宫解)
java原创 2020-04-06 09:51:04 · 2069 阅读 · 4 评论 -
java可视化,实现走迷宫小游戏(包含DFS自动寻找迷宫解)
由于一些2020年大家都知道的原因,放假在家利用闲暇之余观看了波波老师的可视化算法课,传送门,收获颇丰。现对其中的迷宫寻路算法可视化进行改造和补充,做成了一个玩家自己走迷宫的程序。本程序适用于java程序员巩固类与对象、文件读取、事件响应、awt包中各种工具的相关概念以及对逻辑能力的锻炼。由于作者水平问题,本程序难免存在纰漏之处,如有提醒或者此代码更多的补充,欢迎联系我vx:wjw031...原创 2020-03-31 19:39:28 · 2536 阅读 · 5 评论