
算法
mingkai_beijing
这个作者很懒,什么都没留下…
展开
-
图解Python List数据结构
Python中的列表作为一个基本数据结构,大部分程序中都会使用其作为存储数据容器,可能很多人都和我一样觉得Python中的列表无非就是一个动态数组,就像C++中的vector或者Go中的slice一样。但事实真的是这样的吗?1. List实现我们来思考一个简单的问题,Python中的list是允许我们存储不同类型的数据的,既然类型不同,那内存占用空间肯定就不同,那不同大小的数据对象又是如何存入“标准”数组中呢?比如下面的代码中,我们分别在数组中存储了一个字符串,一个整形,以及一个dict对象,假如是原创 2020-08-13 22:25:20 · 6447 阅读 · 1 评论 -
图解RingBuffer数据结构
本篇介绍一种简单高效的数据缓存结构:RingBuffer, 这种结构实现起来只需要几行代码即可,但使用场景却很广泛,比如在Linux内核中网络数据包的缓存,系统日志的存储等多处使用过该结构。同时它也被广泛的应用于异步通信以及嵌入式设备中,提供高效的数据缓存读写操作。1. 实现原理RingBufferr实现比较简单,基本上只需要一个数组结构,外加两个用于存储位置信息的变量即可。其中的数组采用固定大小容量,便于重用内存,不会出现动态内存不断分配和销毁的情况,这对于一些GC类编程语言来说,大...原创 2020-07-27 22:13:11 · 8301 阅读 · 1 评论 -
大话贪心算法与霍夫曼树
1.什么是贪心算法假设你去菜市场买菜,去了以后才发现菜市场只供应下面的四种食品了,但是却告诉你说现在清仓,所有商品一律1块钱一斤处理。如果你的购物篮只能携带10斤左右的商品的情况下,怎么选择才能保证买到的商品最划算呢? 食物名称 每斤/单价(原价) 剩余 牛肉 20元 4斤 蔬菜 3元 10斤 ...原创 2020-07-11 16:42:21 · 566 阅读 · 0 评论 -
图解七大排序算法
“排序是计算机的核心内容。事实上,从很多方面看,如果没有排序,计算机就不会变成现实。”《算法之美:指导工作与生活的算法》排序算法,或许是我们日常最常见也是使用频率最多的算法。比如你在电商网站买东西,推荐商品往往基于相似度或者基于销售量等维度排序。我们每日接收的邮件是程序中按照时间进行排序好的,我们点外卖时候推送的列表是按照评分和地理位置进行排序的。搜索引擎检索内容也是按照一定的相似度算法进行排序好才呈现给你的,所以搜索引擎实际上就是一个排序引擎。本篇文章通过图例的方式逐一讲...原创 2020-07-06 10:46:41 · 4024 阅读 · 1 评论 -
图解最长公共子序列LCS问题
很多人在上学的时候都有过对毕业论文进行查重的经历,一般可以通过CNKI,知网等平台提交自己的论文,平台将论文与其他论文进行匹配查重,最终得到一个相似度。不知大家对于查重问题有没有思考过,他背后是如何实现的呢?难道就是找到相似的字符串匹配就可以吗?本篇文章就带大家了解一种可以解决这个问题的经典算法。本文主要主要包含以下三方面: 什么是LCS 如何实现LCS计算 LCS的使用场景 1. 什么是LCS最长公共子序列,英文名称为Longest Commo...原创 2020-07-05 21:48:31 · 1635 阅读 · 0 评论 -
红黑树的设计与实践
本文主要介绍以下五个方面,通过本文可以大致掌握红黑树的基础知识,并且有助于你在现实场景中根据需要选择合适的数据结构。什么是红黑树?红黑树与哈希表的区别如何构造红黑树?红黑树在DNS数据存储中的应用其他使用场景1. 定义红黑树本身也是一个二叉树结构,对于普通二叉树结构,其本身的树形结构依赖于插入数据的顺序,比如我们插入一个数组(1,2,3,4,5,6)到二叉树中, 普通二叉树的结构如下面所示:这种情况下,二叉树和链表等价,执行效率也相同,我们使用二叉树的目的就是获得O原创 2020-07-03 10:38:05 · 585 阅读 · 0 评论 -
三种字符串查找算法的Go实现
字符串查找就是给定一段文字,查找所有包含特定单词的方式,当我们使用网站浏览信息的时候,用Ctr+F搜索网页, 或在linux上使用grep查询日志文件中的特殊字符串都是属于这类模式。所以算是一种比较常见的算法,本文将总结一些字符串查找算法常见的实现方式,以及如何用Go语言实现该算法。主要的算法分为三种:暴力遍历算法KMP算法BM算法1. 暴力遍历算法暴力遍历算法,简单来说就是通过一...原创 2019-12-02 09:41:00 · 1498 阅读 · 0 评论