![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
AI算法工程师YC
Work together and make progress together
展开
-
马拉车算法(Manacher's Algorithm)
马拉车算法这个马拉车算法 Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的。对于回文串想必大家都不陌生,就是正读反读都一样的字符串,比如 “bob”, “level”, “noon” 等等,那么如何在一个字符串中找出最长回文子串呢,可以...原创 2019-12-26 18:31:58 · 294 阅读 · 0 评论 -
viterbi算法
简介viterbi算法其实就是多步骤每步多选择模型的最优选择问题,其在每一步的所有选择都保存了前续所有步骤到当前步骤当前选择的最小总代价(或者最大价值)以及当前代价的情况下前继步骤的选择。依次计算完所有步骤后,通过回溯的方法找到最优选择路径。符合这个模型的都可以用viterbi算法解决。最优路径理解在理解viterbi算法之前,我们先来跟随步骤计算一下下面这幅图从左到右的最大路径下面我们...原创 2019-11-14 20:10:49 · 490 阅读 · 1 评论 -
朴素贝叶斯分类器(Naive Bayes classifier)
朴素贝叶斯生活中很多场合需要用到分类,比如新闻分类、病人分类等等。本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法。病人分类让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。某个医院早上收了六个门诊病人,如下表。症状 职业 疾病打喷嚏 护士 感冒打喷嚏 农夫 过敏头痛 建筑工人 脑震荡头痛 建...原创 2019-11-14 11:57:18 · 2024 阅读 · 0 评论 -
斐波那契数列的5种python解法
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)...原创 2019-11-11 22:11:02 · 1643 阅读 · 0 评论 -
归并排序(C++ & Python)
归并排序将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。从下往上的归并排序:将待排序的数列分成若干个长度为1的子数列,然后将这些数列两两合并;得到若干个长度为2的有序数列,再将这些数列两两合并;得到若干个长度为4的有序数列,再将它们两两合并;直接合并成一...原创 2019-10-25 11:37:53 · 131 阅读 · 0 评论 -
基数排序(C++ & Python)
基数排序基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。通过基数排序对数组{53, 3, 542, 748, 14, 214, 154, 63, ...原创 2019-10-25 11:25:42 · 124 阅读 · 0 评论 -
桶排序(C++ & Python)
桶排序桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取...原创 2019-10-25 11:19:36 · 142 阅读 · 0 评论 -
堆排序(C++ & Python)
堆排序堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。因此,学习堆排序之前,有必要了解堆!若读者不熟悉堆,建议先了解堆(建议可以通过二叉堆,左倾堆,斜堆,二项堆或斐波那契堆等文章进行了解),然后再来学习本章。我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本...原创 2019-10-25 11:12:40 · 157 阅读 · 0 评论 -
希尔排序(C++ & Python)
希尔排序希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。 这一趟排...原创 2019-10-25 10:38:31 · 135 阅读 · 0 评论 -
插入排序(C++ & Python)
插入排序直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。下面选取直接插入排序的一个中间过程对其进行说明。假设{20,30,40,10,60,50...原创 2019-10-25 10:11:13 · 108 阅读 · 0 评论 -
快速排序(Python & C++)
快速排序快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流程:(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基准值...原创 2019-10-25 09:50:10 · 140 阅读 · 0 评论 -
选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。下面以数列{20,40,30,10,60,50}为例,演示它的选择排序过程(如下图)。排序流程第1趟:i...原创 2019-10-24 22:08:35 · 100 阅读 · 0 评论 -
冒泡排序(Python & C++)
十大排序算法的分析与实现简介:总的来说,排序算法共有九大类,即冒泡排序、选择排序、快速排序、插入排序、希尔排序、归并排序、基数排序、桶排序以及堆排序等,本文编程语言主要使用Python 和 C++来实现,并从时间效率和空间效率上进行对比分析和总结。冒泡排序冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会...原创 2019-10-24 21:51:11 · 247 阅读 · 0 评论 -
N皇后问题(回溯法)
著名的八皇后问题八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语...原创 2019-09-27 16:01:41 · 1179 阅读 · 0 评论 -
马踏棋盘
版权声明:本文为码农YC博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://mp.csdn.net/mdeditor/101294240马踏棋盘解决方案:马踏棋盘是经典的程序设计问题之一,主要的解决方案有两种:一种是基于深度优先搜索的方法,另一种是基于贪婪算法的方法。第一种基于深度优先搜索的方法是比较常用的算法,深度优先搜索算法也...原创 2019-09-24 19:17:12 · 472 阅读 · 1 评论