
算法
文章平均质量分 89
shankusu2017
go lua c 服务器开发 shankusu2017.github.io
展开
-
高频面试题:什么是B树?为啥文件索引要用B树而不用二叉查找树?
以下内容转载自https://www.toutiao.com/i6748668206870692356/薄荷味的团子2019-10-17 15:19:22一、面试被怼面试官:你知道文件索引、数据库索引一般用什么数据结构来存储吗?小秋:知道啊,一般都是用树形结构来存储的。面试官:可以说说为啥用树形结构来存储吗?小秋:树形结构例如想 B 树,B+ 树,二叉查找树都是有序的,所以查询效率很高,可以再 O(logn) 的时间复杂度查找到目标数据。面试官:那可以问问文件索引,例如数据库索.转载 2021-02-22 23:54:22 · 215 阅读 · 0 评论 -
掌握了这些核心算法,才能说自己是程序员
以下内容转载自https://blog.youkuaiyun.com/m0_37907797/article/details/102661778一、算法最最基础1、时间复杂度2、空间复杂度一般最先接触的就是时间复杂度和空间复杂度的学习了,这两个概念以及如何计算,是必须学的,也是必须最先学的,主要有最大复杂度、平均复杂度等,直接通过博客搜索学习即可。二、基础数据结构1、线性表列表(必学) 链表(必学) 跳跃表(知道原理,应用,最后自己实现一遍) 并查集(建议结合刷题学习)不用说,链表.转载 2021-02-22 23:53:22 · 222 阅读 · 0 评论 -
数据结构与算法: 三十张图弄懂「图的两种遍历方式」
以下内容转载自https://www.toutiao.com/i6675217946974880270/数据结构与算法: 三十张图弄懂「图的两种遍历方式」原创五分钟学算法2019-04-02 16:56:151 引言遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次。在二叉树基础中,介绍了对于树的遍历。树的遍历是指从根节点出发,按照一定的访问规则,依次访问树的每个节点信息。树的遍历过程,根据访问规则的不同主要分为四种遍历方式:..转载 2021-02-22 23:52:25 · 219 阅读 · 0 评论 -
面试时写不出排序算法?看这篇就够了
以下内容转载自https://www.toutiao.com/i6794992485140529675/本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。冒泡排序要点冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。算法思想它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。.转载 2021-02-22 23:51:07 · 152 阅读 · 0 评论 -
程序员应该知道的7大基础算法,看这篇就ok
以下内容转载自https://www.toutiao.com/i6639186853536727565/牛B程序员2018-12-26 14:35:48算法是计算机科学领域最重要的基石之一,但却受到了一些程序员的冷落。许多小伙伴看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司和培训机构误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日.转载 2021-02-22 23:49:53 · 821 阅读 · 0 评论 -
二叉树基本操作:前序、中序、后序遍历(递归方式)
以下内容转载自https://www.toutiao.com/i6639312951721329156/二叉树基本操作:前序、中序、后序遍历(递归方式)考试紧张2018-12-26 22:45:07二叉树是最常见最重要的数据结构之一,它的定义如下: 二叉树(binary tree)是有限多个节点的集合,这个结合或者是空集,或者由一个根节点和两颗互不相交的、分别称为左子树和右子树的二叉树组成。二叉树最基本的操作是遍历:一般约定遍历时左节点优先于右节点,这样根据根节点的遍历顺序可分为三种遍.转载 2021-02-22 23:48:54 · 721 阅读 · 0 评论 -
KMP算法深度解析
以下内容转载自https://blog.youkuaiyun.com/liuaigui/article/details/4409505摘要:KMP算法是字符串匹配的经典算法,由于其O(m+n)的时间复杂度,至今仍被广泛应用。大道至简,KMP算法非常简洁,然而,其内部却蕴含着玄妙的理论,以至许多人知其然而不知其所以然。本文旨在解开KMP算法的内部玄妙所在,希望能够有助于学习与理解。1、KMP算法一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此称之为KMP.转载 2021-02-22 23:47:57 · 257 阅读 · 0 评论 -
C语言执行动态内存分配时,操作系统是如何避免“浪费”的?
以下内容转载自https://www.toutiao.com/i6732066093378060807/在C语言程序开发中,提到动态内存分配时,基本上每个程序员都明白 calloc() 和 malloc() 库函数的区别——calloc() 函数不仅分配内存,还会将分配后的内存清零,而 malloc() 函数则对分配好的内存不做任何操作。calloc() 函数的效率比 malloc()+memset() 函数更高?calloc() 函数的效率比 malloc()+memset() 函数更高.转载 2021-02-09 14:46:24 · 166 阅读 · 0 评论 -
KMP 快速匹配字符串 算法 数据结构
以下内容转载自https://www.toutiao.com/i6854730621588242951/今天是算法数据结构专题的第29篇文章,我们来聊一个新的字符串匹配算法——KMP。KMP这个名字不是视频播放器,更不是看毛片,它其实是由Knuth、Morris、Pratt这三个大牛名字的合称。老外很喜欢用人名来命名算法或者是定理,数学里就有一堆,什么高斯定理、欧拉函数什么的。但是中国人更倾向于从表意上来给一个概念命名,比如勾股定理、同余定理等等。之前觉得用人名命名很洋气,作者可以青史留名,..转载 2021-02-09 12:55:40 · 226 阅读 · 0 评论 -
哈希之开散列和闭散列
目的:实现一种结构,不经过任何比较,一次直接得到想要的元素。通过某种函数使元素的存储位置与它的关键码之间建立一种一一映射的关系。那么就可以在查找时快速的找到需要的元素。哈希概念哈希之散列方法:插入元素时:根据需要插入元素的值,通过某种计算得出元素的存储位置,将该元素插入到其对应的位置。 查找元素时:根据需要查找的元素进行某种计算得到其存储位置,将该位置的元素与查找的元素进行比较,若相同则查找成功。例如:数据集合为{180,750,460,430,800,600,541}哈希函数:Hash(k转载 2020-09-24 10:27:18 · 967 阅读 · 0 评论 -
每个程序员都必须知道的8种数据结构
以下 内容转载自https://www.toutiao.com/i6810776151103898115/数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键主题。因此,作为开发人员,我们必须对数据结构有充分的了解。在本文中,我将简要解释每个程序员必须知道的8种常用数..转载 2021-02-09 13:02:08 · 587 阅读 · 0 评论 -
浅谈linux定时器时间轮算法
以下内容转载自https://www.toutiao.com/i6914186976950223367/Linux定时器分为低精度定时器和高精度定时器两种类型,内核对其均有实现。本文讨论的是我们在应用程序开发中比较常见的低精度定时器。作为常用的基础组件,定时器常用的几种实现方法包括:基于排序链表实现、基于小根堆实现、基于红黑树实现、基于时间轮实现。本文讲解的是时间复杂度最优,也是linux内核采用的基于时间轮的实现方式。采用有序链表实现的定时器,添加定时器的时间复杂度为O(n);采用小根堆或红黑树.转载 2021-02-03 13:08:54 · 379 阅读 · 0 评论 -
Horner法则
霍纳法则:求多项式值的一个快速算法。简单介绍:假设有n+2个数 , a0,a1,a2,a3,……an 和x组成的一个多项式,形式如下: a0*x^0+a1*x^1+a2*x^2+a3*x^3+……an*x^n ,通常都是一项一项的求和然后累加,这样的话要进行n* (n+1)/2 次乘法运算 和 n 次加法运算 ,而霍纳法则就是一个改进的一个算法。通过变换得到如下式子:((...转载 2018-08-25 19:45:34 · 2221 阅读 · 0 评论 -
红黑树
来源:伯乐专栏作者/玻璃猫,微信公众号 - 程序员小灰好文投稿, 请点击 → 这里了解详情————————————二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。下图中这棵树,就是一颗典...转载 2018-08-23 20:29:36 · 174 阅读 · 0 评论 -
第一次看完了《数据结构》
看完了严蔚敏的《数据结构》,看懂了一点点,堆栈后面的,就有点看不懂或者说不知道读者的重点了,可能和最近自己找工作有些关系吧,整体来说,挑战了自己对于这一块知识的恐惧,自己克服了恐惧吧。只看懂了一些,另外还有好多没有看懂。计划下,看看怎么安排,学习数据结构与算法这一块的知识。...原创 2018-07-31 21:27:48 · 306 阅读 · 0 评论 -
漫画:经典谷歌面试题“扔鸡蛋”,看看你会做吗?
第二天题目:扔鸡蛋问题有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点?举个栗子,最笨的测试方法,是什么样的呢?把其中一个鸡蛋,从第1层开始往下扔。如果在第1层没碎,换到第2层扔;如果在第2层没碎,换到第3层扔.......如果第59层没碎,换到第60层扔;如...转载 2018-07-11 18:28:45 · 274 阅读 · 0 评论 -
排序算法
自己的第一个快速排序法,终于克服了心里的恐惧void quicksort(int *head_arg, int *tail_arg){ if (head_arg >= tail_arg) return; /* step1: set flag'value */ int flag = *head_arg; int *head = head_arg; int *tai...原创 2018-04-27 00:33:40 · 178 阅读 · 0 评论