随笔分类 -  算法

与算法相关的
摘要:前言 常见的一个问题: 给定一个整形数组, 统计其中有多少唯一的元素. 常见的思路有哪些呢? 元素去重并统计, 利用哈希表进行去重计数. 数组排序后统计 以上空间复杂度均与元素数量关联, 如果允许损失精度, 是否可以使用较低的空间占用来统计呢? 利用布隆过滤器是一种的一种 但是, 我在这篇文章看到了 阅读全文
posted @ 2024-01-21 16:39 烟草的香味 阅读(17) 评论(0) 推荐(0) 编辑
摘要:前言 md5算法是我们经常会用到的一个hash函数, 虽然已经被证明是不安全的了, 但其应用依然十分广泛. 哈希函数具有如下特点: 将任意长度的字符串映射为固定长度 源数据微小的改动会导致结果差异巨大 不可逆 暴力破解困难 你有没有好奇过, 哈希函数是如何做到这些的呢? 本文就拿md5举例, 看一看 阅读全文
posted @ 2023-10-23 23:32 烟草的香味 阅读(135) 评论(0) 推荐(0) 编辑
摘要:前言 在分布式系统中交换信息, 部分成员可能出错导致发送了错误的信息, 在这种情况下如何达成共识. 这就是拜占庭将军问题所要解决的. 问题的简要描述如下: 3个军队协同作战(为了简单易懂, 以3个军队描述) 每支军队的作战策略有两种"进攻"和"撤退" 每个军队之间通过信使传递消息 问: 如何达成共识 阅读全文
posted @ 2023-01-02 18:21 烟草的香味 阅读(207) 评论(0) 推荐(0) 编辑
摘要:前言 最近看了一档综艺《心动的信号》(唉, 单身久了, 开始喜欢看别人谈恋爱了) 节目中共有n男n女, 他们会在节目的最后进行表白, 如果我喜欢你, 恰好你也喜欢我, 那么便就会在一起, 自此传为一段佳话. 于是, 我就在想, 如何用算法来实现这个匹配的过程呢? 单一匹配 将信息抽象化, 现有两个集 阅读全文
posted @ 2021-08-25 22:52 烟草的香味 阅读(401) 评论(0) 推荐(0) 编辑
摘要:前言 最近被我大哥安利了一道算法题, 这道题说难, 还不至于我做不出来, 说简单吧, 我还想不到最优解, 等把最优解告诉我之后, 我还正好能理解. 我甚至曾经怯怯的认为, 这题就是我哥专门给我找的, 嘿嘿, 心中说不出的小欢喜. 题来了, 此题出自力扣, 原题链接: https://leetcode 阅读全文
posted @ 2020-07-11 00:28 烟草的香味 阅读(637) 评论(0) 推荐(1) 编辑
摘要:概述 都知道, 计算机中存储整数是存在着位数限制的, 所以如果需要计算100位的数字相乘, 因为编程本身是不支持存储这么大数字的, 所以就需要自己实现, 当然了, 各个编程语言都有大数的工具包, 何必重复造轮子, 但我还是忍不住好奇他们是如何实现的, 虽然最终没有翻到他们的底层源码去, 但查询的路上 阅读全文
posted @ 2020-06-20 18:26 烟草的香味 阅读(692) 评论(0) 推荐(0) 编辑
摘要:概述 之前在听到数据压缩的时候, 想着肯定是某些高深莫测的算法, 能够完成数据的压缩这种事情, 最近看了看, 嗯, 至少咱还是能看懂的. 无损压缩 众所周知, 不管你是exe, word, txt, dmg等等, 在存储上都是以二进制进行存储的, 所以, 在讨论压缩时, 忽略文件格式即可, 只要将其 阅读全文
posted @ 2020-06-06 00:04 烟草的香味 阅读(345) 评论(0) 推荐(0) 编辑
摘要:问题 前两天看到一道算法题, 想了几天, 然后到网上搜了搜, 基本和我想到的相契合. 来, 题目如下: 给出一个数组, 求出和最大的连续子集. 举个例子: 数组 [1, 2, 3, 4, 5] 那和最大的就是数组本身了. 但是, 如果中间出现负数, 那情况立刻就不一样了, 你需要考虑是否能够将负数左 阅读全文
posted @ 2020-05-29 23:52 烟草的香味 阅读(251) 评论(0) 推荐(0) 编辑
摘要:概述 还记得之前在介绍 的时候提到过的数字签名吗? 忘了?? 来, 复习一下. "揭开HTTPS的神秘面纱" 其中用到了非对称加密算法, 此算法分为公钥和私钥, 一个加密, 只能用另一个进行解密. 第一次看到非对称加密算法的时候, 说实话我有些懵逼, 实在是想不到为何会有如此神奇的算法? 你就好比有 阅读全文
posted @ 2020-05-23 01:09 烟草的香味 阅读(116) 评论(0) 推荐(0) 编辑
摘要:前言 前两天, 一个大学同学问我布隆过滤器, 我本想反手甩他一篇我写的文章, 尴尬的是我找了找发现没有写过.... 无妨, 补上 场景 你在写一个全网资源的爬虫, 为了爬取全网的资源, 页面中所有的超链接你都要点击去访问一遍. 但是肯定会遇到这种情况, A页面持有B页面的链接, 同时B页面也持有A页 阅读全文
posted @ 2020-05-16 19:03 烟草的香味 阅读(164) 评论(0) 推荐(0) 编辑
摘要:概述 迪菲 赫尔曼算法用于通信双方交换密钥. 还记得之前介绍HTTPS协议的时候, 提到需要先通过对方公钥来进行密钥的交换, 然后再通过密钥对通信内容进行加密. 迪菲 赫尔曼算法就是用于交换密钥的. . 此算法与非对称加密算法不同哦. OK, 一起来看看吧. 引入 在正式介绍迪菲 赫尔曼算法之前, 阅读全文
posted @ 2020-05-03 22:11 烟草的香味 阅读(698) 评论(0) 推荐(1) 编辑
摘要:引言 时隔一年,我又想起当初看数据库时,看到的B+树,就是数据库的索引使用的数据结构。再整理一下,看看自己没有忘记很多吧。 概述 B+树之前,先来看一下二叉查找树(1,2,3,4,5,6,7) 恩, 差不多就长这样。诚然,在二叉查找树中查找某个元素是很快速的,二分查找嘛。但想想数据库查找数据的场景: 阅读全文
posted @ 2019-11-24 19:23 烟草的香味 阅读(171) 评论(0) 推荐(0) 编辑
摘要:概述 在Google中随意搜索,如下所示: 他会自动显示相关的搜索,不知道有没有想过这个功能是如何实现的呢?面对海量的数据,它怎么能在我输入的同时,如此快速的检索到相关内容呢?当我查找资料后,就遇到了它,Trie树。 What? Trie树是个什么玩意呢?为啥他能快速进行检索?Trie树也叫字典树。 阅读全文
posted @ 2019-11-10 16:49 烟草的香味 阅读(216) 评论(0) 推荐(0) 编辑
摘要:回顾 还记的贪婪算法么? 如果你不记得了, 看了下面这个例子你一定会想起来, 因为这个例子太普遍了, 几乎每个将贪婪算法的地方, 第一个例子都是它, 言归正传. 问题: 现在有如下课程表, 要将这些课尽可能多的安排在教室A内. 首先将所有课程都安排在教师A是不现实的, 因为时间上存在冲突. 那改怎么 阅读全文
posted @ 2019-05-29 23:49 烟草的香味 阅读(575) 评论(1) 推荐(1) 编辑
摘要:概述 什么是散列表? 如果说起它的另一个名字, 你一定很熟悉, 它的英文叫"Hash Table", 哈希表, 很熟悉吧. 散列的思想, 其实就是利用数组的随机访问特性, 将key-value形式的数据, 其中的key转换成数组下标, 即可实现将其存放到数组中, 进而实现随机访问. 而其中将key转 阅读全文
posted @ 2019-05-19 21:39 烟草的香味 阅读(361) 评论(0) 推荐(0) 编辑
摘要:概述 线性表中的链表是我们都很熟悉的结构了, 链表的增删优于数组, 但是不支持随机访问, 链表在查找时, 只能从头节点向后遍历, 那么针对链表, 能不能解决其访问效率的问题呢? 跳表来了, 顾名思义, 跳表就是可以跳跃的表, 我简单画了张图: 在原来链表的基础上, 建立一个新的索引链表, 原链表没两 阅读全文
posted @ 2019-05-12 22:58 烟草的香味 阅读(456) 评论(0) 推荐(0) 编辑
摘要:最大前驱路径是什么呢? 比如, 用户在页面中的访问路径是 1,2,3,4 但是,用户不会按照正常设定好的路径进行访问, 用户的访问路径可能是 1,2,5,2 这时候,我们就要从访问路径中提取出 1,2,5 起始仔细观察发现也很简单, 思路如下: 是不是很简单, 但是,路径肯定是不止一条的, 可能用户 阅读全文
posted @ 2019-03-24 22:52 烟草的香味 阅读(549) 评论(0) 推荐(0) 编辑
摘要:概述 可以参看之前的文章: 排序算法之计数排序 桶排序就不上代码了, 计数排序和基数排序都是桶排序,基数排序我没有写,其实和基数排序的思想一脉相承,有兴趣的可以看看,写计数排序主要为了帮助理解桶排序的思想。 简单说, 在排序时, 根据数据的范围准备不同的N个桶, 遍历整个序列, 将数据放到不同的各自 阅读全文
posted @ 2019-01-02 22:55 烟草的香味 阅读(377) 评论(0) 推荐(0) 编辑
摘要:概述 简单的来说, 归并就是将两个有序数列合并成一个有序数列. 归并排序就是利用归并的思想, 对待排序数组分成若干个长度为1的子数列, 然后将长度为1的数列进行两两合并, 得到若干个长度为2的有序数列, 在两两合并,得到长度为4的数列, 以此类推, 知道合并为1以数列, 结果就是排序好的数组. 其步 阅读全文
posted @ 2019-01-02 22:42 烟草的香味 阅读(177) 评论(0) 推荐(0) 编辑
摘要:概述 简单来说, 计数排序就是申请一个相同数据范围的数组空间, 计算每个数字各有几个,如此即可. 如一个数组为: [5, 2, 3, 4, 6, 3, 1, 0] 申请一个长度为6的数组(因为数组范围为0-5), 其中的值为: [1, 1, 1, 2, 1, 1, 1] 其数组意思就是, 0有1个, 阅读全文
posted @ 2019-01-02 22:29 烟草的香味 阅读(212) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
主题色彩