算法之数据结构
文章平均质量分 64
图灵的猫.
给行业以ai,而不是给ai以行业
展开
-
Python入门之类与面向对象(一)
我的机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~...原创 2018-01-13 22:50:36 · 412 阅读 · 0 评论 -
Unicode与UTF8:字符集与字符编码的关系
110之后的所有部分(5个bit)加上后一个字节的除10外的部分(6个bit)代表在Unicode中的序号。GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。编码字符集,用一个编码值code point来表示一个字符(即该字符在子库表中的位置),这个值称为字符对应于编码字符集(如:Unicode、ASCII)的序号。如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。原创 2018-02-07 19:00:30 · 1000 阅读 · 0 评论 -
动态规划C语言实现之最长公共子序列(LCS)
动态规划中,我曾对于01背包和硬币问题有过一些理解,今天参考了博客上其他同学的经验,完成了最长公共子序列LCS的代码实现。上面都是摘自《算法导论》,如果熟悉这两个内容,那么实现起来就方便许多。2.状态转移表(数组用来存放位置和长度)原创 2018-02-06 23:09:28 · 16022 阅读 · 2 评论 -
图论(三):哈密顿图与哈密顿回路
(2)设G是n(n>=3)阶无向简单图,若对于G中的每一对不相邻的顶点u,v,均有d(u)+d(v)>=n-1则G中存在哈密顿通路。(3)在n(n>=2)阶有向图D=中,如果略去所有有向边的方向,所得无向图中含生成子图Kn,则D中存在哈密顿通路。(2)若一个无向图G满足上述(2)中的条件,一个有向图D满足上述(3)的推论的条件,则G、D都是哈密顿图。由推论知,对于完全图Kn,当n>=3时,是哈密顿图,完全二部图Kr,s当r==s>=2时是哈密顿图。设G=为一图(无向图或有向图).G中。原创 2018-02-18 00:28:49 · 17010 阅读 · 0 评论 -
简单易懂——Dijkstra算法讲解
赋权有向图或者无向图。原创 2018-02-18 00:22:46 · 109831 阅读 · 28 评论 -
图论(二):图的割点(cut vertex)与连通度(connectivity)
在无向连通图中,删除一个顶点v及其相连的边后,原图从一个连通分量变成了两个或多个连通分量,则称顶点v为割点,同时也称关节点(Articulation Point)。一个没有关节点的连通图称为重连通图(biconnected graph)。若在连通图上至少删去k 个顶点才能破坏图的连通性,则称此图的连通度为k。关节点和重连通图在实际中较多应用。显然,一个表示通信网络的图的连通度越高,其系统越可靠,无论是哪一个站点出现故障或遭到外界破坏,都不影响系统的正常工作;原创 2018-02-18 00:25:28 · 7542 阅读 · 0 评论 -
有趣的算法(五):一文读懂二叉搜索树的插入、删除
我的机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~...原创 2018-03-15 15:57:58 · 408 阅读 · 0 评论 -
再谈哈希:Hash中的冲突消解机制以及拉链法
在之前的文章:我们学习了哈希表和哈希函数(散列)的定义,在进行更进一步的解释前我们先复习一下相关概念:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。原创 2018-03-16 22:24:31 · 1810 阅读 · 0 评论 -
快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法
因此,算法复杂度一样只是说明随着数据量的增加,算法时间代价增长的趋势相同,并不是执行的时间就一样,这里面有很多常量参数的差别,比如在公式里各个排序算法的前面都省略了一个c,这个c对于堆排序来说是100,可能对于快速排序来说就是10,但因为是常数级所以不影响大O。堆排序每次取一个最大值和堆底部的数据交换,重新筛选堆,把堆顶的X调整到位,有很大可能是依旧调整到堆的底部(堆的底部X显然是比较小的数,才会在底部),然后再次和堆顶最大值交换,再调整下来,可以说堆排序做了许多无用功。原创 2018-02-24 19:04:28 · 28127 阅读 · 5 评论 -
大数据算法面试:1亿数据在有限内存上如何排序
比如我们要找出现次数最多的前100个,我们将1000万的数据分布到10台机器上,找到每台出现次数最多的前100个,归并之后这样不能保证找到真正的第100个,因为比如出现次数最多的第100个可能有1万个,但是它被分到了10台机子,这样在每台上只有1千个,假设这些机子排名在1000个之前的那些都是单独分布在一台机子上的,比如有1001个,这样本来具有1万个的这个就会被淘汰,即使我们让每台机子选出出现次数最多的1000个再归并,仍然会出错,因为可能存在大量个数为1001个的发生聚集。如果数据无法放入内存。原创 2018-03-13 21:36:33 · 19249 阅读 · 2 评论 -
有趣的算法(四)最通俗易懂的KMP算法解析
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。原创 2018-02-26 21:01:50 · 1955 阅读 · 0 评论 -
动态规划入门之最长公共子序列
如上图,给定的字符序列: {a,b,c,d,e,f,g,h},它的子序列示例: {a,c,e,f} 即元素b,d,g,h被去掉后,保持原有的元素序列所得到的结果就是子序列。S1的元素3 与 S2的元素5 不等,c[2,2] =max(c[1,2],c[2,1]),图中c[1,2] 和 c[2,1] 背景色为浅黄色。给定序列s1={1,3,4,5,6,7,7,8},s2={3,5,7,4,8,6,7,8,2},s1和s2的相同子序列,且该子序列的长度最长,即是LCS。原创 2018-02-05 22:09:17 · 1347 阅读 · 1 评论 -
Python中函数的形参与按值传递之间的关系
我对python还不够熟悉 , 但是从近两天的学习中发现 , 其存储模型与java相似 , 即变量中存储的是引用 , 是指向真正内容的内存地址(当然 ,java中的八大基本数据类型 , 变量名和值都是存储在堆栈中的 ) , 对变量重新赋值 , 相当于修改了变量副本存储的内存地址 , 而这时的变量已经和函数体外的变量不是同一个了, 在函数体之外的变量 , 依旧存储的是原本的内存地址 , 其值自然没有发生改变 .- 在函数体中改变变量指向的堆中的值 , 对函数外变量有效.原创 2018-01-22 22:09:15 · 811 阅读 · 0 评论 -
一文详解Python中的*可变参数与**关键字参数
在Python中可以定义可变参数,顾名思义,可变参数就是传入参数是可变的。可以是任意个,以一个简单的数学编程为例,计算但是调用的时候必须定义一个元组或者列表。比如getsum([1,2,3])如果利用可变参数调用函数的方式可以变成这样的话就方便的多比如getsum(1,2,3)可以这么修改如果已经有一个list或者tuple,要调用一个可变参数怎么办?这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*原创 2018-01-15 23:02:09 · 9857 阅读 · 1 评论 -
Python如何从一个文件中调用另一个文件的类
如果是在同一个 module中(也就是同一个py文件里),直接用就可以 如果在不同的module里,例如 a.py里有 class A: b.py 里有 class B: 如果你要在class B里用class A 需要在 b.py的开头写上 from a import A。如果你要在class B里用class A 需要在 b.py的开头写上 from a import A。类名要和文件名符合,且引用时要注意原始文件类的基类与派生类的关系。如果在不同的module里,例如。原创 2018-01-24 21:55:47 · 12329 阅读 · 0 评论 -
面向对象之Python的链表实现(二)循环链表
接上一章的练习,这里接着实现单链表的变型——传说中的循环单链表。给出一个简单的类,构造4个功能并实例化测试。在下一篇文章中将会关注一个比较tricky的问题:如何判断链表有环?原创 2018-01-24 21:51:06 · 545 阅读 · 0 评论 -
Leetcode刷题修炼手册
我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~“跟着...原创 2018-01-25 13:53:13 · 51609 阅读 · 5 评论 -
深入浅出带你了解Python2与Python3的异同
next()(.next())是一种常用的函数(方法),这是另一种语法更改(或者说在执行时更改)值得一提:在Python2.7.5中你可以使用next()函数和.next()方法,在Python3只保留了next()函数(调用.next()方法会引发AttributeError异常)。因为它们实现了相同的方式,就会有相同的速度。在Python3中,range()实现了类似xrange()的功能,因此专门的xrange()函数不存在了(在Python3中使用xrange()会抛出一个NameError异常。原创 2018-01-09 21:35:08 · 847 阅读 · 0 评论 -
三次样条插值之三对角矩阵算法
做三次样条曲线时,需要解三对角矩阵(Tridiagonal Matrices)。常用解法为Thomas Algorithm,又叫The tridiagonal matrix algorithm (TDMA)。它是一种基于高斯消元法的算法, 分为两个阶段:向前消元forward elimination和回代backward substitution。本文以一个6乘6矩阵为例,介绍一下使用TDMA的求解过程。原创 2018-04-08 20:46:37 · 2791 阅读 · 0 评论