
算法
文章平均质量分 84
平行宇宙(EUEH)
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串匹配基础(上)
一、BF算法BF算法中文称作“暴力匹配算法”,也叫“朴素匹配算法”。我们先来了解两个概念主串和模式串。来看下面的例子:比如说,在字符串A(长度为n)中查找字符串B(长度为m),那么字符串A就是主串,字符串B就是模式串。因为我们是在主串中查找模式串,所以n>m。BF算法可以用一句话来概括:我们在主串中,检查起始位置分别是 0、1、2....n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的。如下图所示:从上面的例子和算法思想我们可以知道,在极端情况下,比如主串是原创 2021-04-22 14:26:06 · 345 阅读 · 0 评论 -
二分查找(下)
扫码关注公众号,获取更多内容目录一、查找第一个值等于给定值的元素二、查找最后一个值等于给定值的元素三、查找第一个大于等于给定值的元素四、查找最后一个小于等于给定值的元素一、查找第一个值等于给定值的元素// 查找第一个等于给定值const biaryFindFirst = (sortedArr, target) => { if (sortedArr.length === 0) return -1 let low = 0 let high = s原创 2021-03-22 16:47:49 · 208 阅读 · 0 评论 -
二分查找(上)
扫码关注公众号,获取更多内容目录一、什么是二分查找?二、二分查找的时间复杂度三、二分查找的递归与非递归实现1、非递归实现2、递归实现四、二分查找的局限性一、什么是二分查找?二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。假设有10个订单,订单金额分别是:8,11,19,23,27,33,45,55,67,98。我们怎么找到订单金额是2.原创 2021-03-22 13:23:51 · 252 阅读 · 0 评论 -
线性排序:桶排序、计数排序
一、桶排序桶排序的核心思想就是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序(插入或快排),桶内的排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。我们用代码来实现:// 思路:// 将数组中的数据,按桶进行划分,将相邻的数据划分在同一个桶中// 每个桶用插入排序算法(或者快速排序)进行排序// 最后整合每个桶中的数据function bucketSort(array, bucketSize = 5) { if (array.leng转载 2021-03-18 18:33:37 · 191 阅读 · 0 评论 -
排序(下):归并、快速
扫码关注公众号,获取更多内容目录一、归并排序原理及实现二、归并排序性能分析三、快速排序原理及实现四、快速排序性能分析五、归并排序与快速排序的区别一、归并排序原理及实现归并排序使用的是分治思想,将一个大问题分解成小的子问题来解决,其原理我们可以分解为下图,当我们排序一个数组时,先把数组从中间分成前后两部分,然后对这两部分分别排序,再将排好序的这两部分合并在一起,就完成了排序。分治思想和递归思想很像,在实际使用中,分治算法一般都是用递归实现的,分治是一种解决问题.原创 2021-03-17 14:50:50 · 240 阅读 · 0 评论 -
排序(上):冒泡、插入、选择
一、冒泡排序冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。我们来看下面的例子,了解一下冒泡过程(对一组数据4,5,6,3,2,1从小到大排序)。第一次冒泡的过程通过上图可得知,通过第一次冒泡,6这个元素已经存储在正确的位置上,要想完成多有数的排序,我们只要进行6次这样的冒泡操作就可以了。实际上,刚讲的冒泡过程还可以原创 2021-03-16 15:26:06 · 228 阅读 · 0 评论 -
递归
扫码关注公众号,获取更多内容目录一、什么是递归?二、递归需要满足的三个条件三、如何编写递归代码?四、递归代码要警惕堆栈溢出五、递归代码要警惕重复计算一、什么是递归?程序调用自身的编程技巧称为递归,光看定义可能不是很理解,我们举一个例子:周末你和女朋友去电影院看电影,女朋友问你现在坐在第几排,电影院里太黑看不清,这时候怎么办?这时候递归就可以派上用场了,你开始问前面一排的人,他是第几排,你只要在他的数字上加1,就知道自己在第几排了,但是前面的人也不知道自己在第.原创 2021-03-15 15:05:58 · 237 阅读 · 0 评论 -
算法复杂度分析(下)
扫码关注公众号,获取更多内容目录一、最好、最坏情况时间复杂度二、平均情况时间复杂度三、均摊时间复杂度通过算法复杂度分析(上),我们掌握了大部分的算法分析方法,本文将继续讲解四个复杂度分析方面的知识点:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度。一、最好、最坏情况时间复杂度我们来分析下面这段代码的时间复杂度function find(array, x) { let pos = -1; for (let i = ...原创 2021-03-08 14:06:52 · 235 阅读 · 0 评论 -
算法复杂度分析(上)
扫码关注公众号,获取更多内容目录一、为什么需要复杂度分析?二、大O复杂度表示法三、时间复杂度分析1、只看循环执行次数最多的一段代码2、加法法则3、乘法法则四、常见时间复杂度实例1、O(1)2、O(㏒n)、O(n㏒n)3、O(m+n)、O(m*n)五、空间复杂度一、为什么需要复杂度分析?时间、空间复杂度是衡量算法非常重要的考量指标,当我们进行实际运行检测的时候,不同的处理器和数据规模,将会导致算法的性能表现不一致,所以我们需要通过复杂度分析来对.原创 2021-03-05 18:06:35 · 251 阅读 · 0 评论 -
排序算法 — 冒泡排序
一、定义(来源百度百科)冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。...原创 2021-03-04 11:11:21 · 169 阅读 · 0 评论