经典算法
狂奔的菜鸡
知行合一,格物致知。
展开
-
数据结构几大排序算法总结(实现、复杂度)
目录简介冒泡排序,快速排序简单选择排序堆排序归并排序插入排序1 直接插入排序2 希尔排序(缩小增量排序)3 折半插入排序总结简介 排序在数据结构中的内部排序部分,主要介绍了几大常见的排序算法,这里做一下简单的分析总结。 排序: 按关键字大小顺序排列数据。 时间复杂度: 简单的排序方法 O(n2n^2n2),先进的排序方法 O(nlogn原创 2020-09-11 16:22:13 · 2002 阅读 · 0 评论 -
递归算法:recursive algorithm (从小白到掌握)
关于递归,回溯,迭代,循环,这四个经典算法是什么?有什么区别呢?原创 2020-09-10 14:35:48 · 1041 阅读 · 0 评论 -
关于康托展开和逆康托展开详解,及python代码
在LeetCode上有这样一道题:60. 第k个排列给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: “213”示例 2:输入: n = 4, k = 9输出:原创 2020-09-05 19:16:38 · 1005 阅读 · 0 评论 -
python实现二叉树遍历(前、中、后序)
树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:⑴访问结点本身(N)⑵遍历该结点的左子树(L)⑶遍历该结点的右子树(R)前序遍历(先序遍历):NLR:先访问根节点–> 访问左原创 2020-09-02 16:27:49 · 4976 阅读 · 0 评论 -
深度优先搜索和广度优先搜索(详解及Python实现)
目录1. 简介1. 简介 深度优先搜索(DFS):对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。举例: 上图是一个无向图,如果从A点发起深度优先搜索(以下的访问次序并不是唯一的,第二个点既可以是B也可以是C,D),则我们可能得到如下的一个访问过程:A->B->E(没有路了!回溯到A)->C->F->H->G->D(没有路,最终原创 2020-09-02 13:17:24 · 3049 阅读 · 0 评论 -
算法:二分查找(详解及例题)
目录1. 简介2. 举例1. 简介首先看看百科中对二分查找的简介: 二分查找(折半查找)优点:比较次数少,查找速度快,平均性能好,占用系统内存较少缺点:要求待查表为有序表,且插入删除困难。因此适用于不经常变动而查找频繁的有序列表。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;  原创 2020-08-27 22:32:27 · 4994 阅读 · 0 评论 -
算法:分治法(详解及例题)
目录1. 简介2. 适用条件3. 实现步骤4. 例题解析4.1 二分查找4.2 最大子序和(LeetCode题)1. 简介 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很...原创 2020-05-07 13:33:33 · 3013 阅读 · 0 评论 -
算法:动态规划(详解及例题)
文章目录1. 简介2. 适用条件3. 动态规划算法的设计4. 经典例题4.1 最长公共子序列问题(LCS)4.2 最低票价问题(LeetCode例题) 最近在刷LeetCode时看到了一道动态规划的题,一些大神的题解很巧妙,这里复习一下动态规划和经典问题,顺便分享给大家这道题。1. 简介 &nbs...原创 2020-05-06 19:26:42 · 2356 阅读 · 0 评论