基本算法
文章平均质量分 91
码兵焦头头
这个作者很懒,什么都没留下…
展开
-
算法基础:快速排序
快速排序及其思想的运用序言:快速排序采用了分治的思想,是对冒泡的改进,它的期望复杂度是Θ(nlgn)\Theta(n\lg n)Θ(nlgn),而且其中隐含的常数因子非常小。本文将笔记其算法的核心思想及应用(参考《算法导论》第3版)。1. 快速排序的描述快排与归排同样,思想就是分治。即所谓,1分2解3合:1分:第一步,分解。我们用递归的形式将原数组划分成两部分,即A[p..r]→A...原创 2019-01-07 11:26:04 · 200 阅读 · 0 评论 -
算法基础:康托展开与逆康托展开
康托展开与逆康托展开序言:本文记录康托展开与逆康拓展开的原理以及其应用。1.概述举例而言,对于 1 ~ 4 的一个全排列 [1, 2, 3, 4] 和 [4, 3, 2, 1],我们知道,从字典序而言,前者是该全排列集的第一个,后者是该集的最后一个。那么,所谓康托展开,即给定一个 nnn 位数的全排列,我们可以根据康托展开公式确定其应当是字典序中的第“几”个全排列。由于康托展开计算的是某...原创 2019-01-18 17:41:06 · 9325 阅读 · 6 评论 -
算法基础:堆排序
堆排序巩固序言:作为时间复杂度为O(nlgn)O(n\lg n)O(nlgn)的成员之一,堆排序亦是一种重要的排序算法。而且,相较于归排和快排,堆排的实现更为复杂一些(包含3个过程),若对其没有一个全面的理解,则很难在面试中现场写出来。本文将详细记录其算法思想(参考《算法导论》第3版)。1. 堆(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树(除了底层外,该树完全充满,底层从左往...原创 2019-01-14 16:06:39 · 152 阅读 · 0 评论 -
动态规划: 字符串系列(上)
动态规划: 字符串系列(上)序言:本文记录用动态规划解决的常见字符串问题。0. 概述动态规划(Dynamic Programming, DP)是典型地以空间换时间的算法,当暴力法(Brute Force, BF)无法在规定时间内解决问题时,动态规划便能体现出其强大的作用。其主要思路是,当原问题可以被分解成多个子问题,且子问题与原问题拥有重叠的结构,我们可以用多个子问题的解递推出原问题的解(...原创 2019-04-18 17:21:55 · 410 阅读 · 0 评论 -
算法基础: 牛顿迭代法
数学姿势: 牛顿迭代法序言:本文记录用牛顿迭代法求高阶方程的解。0. 概述给定函数 f(x)f(x)f(x), 则 f(x)=0f(x) = 0f(x)=0 的解可以通过牛顿迭代法逼近。本文只记录方法,不深究原理。迭代步骤如下:取 f(x)f(x)f(x) 上一点 xnx_nxn 作为迭代起点。以 xnx_nxn 作 f(x)f(x)f(x) 的切线,交 xxx 轴于 xn+1x...原创 2019-04-18 18:13:26 · 690 阅读 · 0 评论