随笔分类 - 算法
快速傅里叶变换的 numpy 实现
摘要:理论 快速傅里叶变换(FFT),即利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称。而在计算机算法中,也可用来简化多项式的乘法和加法运算。具体方法是通过将多项式转换到变换域中,在变换域中进行乘法和加法,再从变换域转换到多项式。 现有长度为 序列和相应的多项式为 $$
斐波那契数列的矩阵算法及 python 实现
摘要:import numpy as np import matplotlib.pyplot as plt from functools import reduce from sympy import sqrt, simplify, fibonacci import sympy 矩阵算法 斐波那契数的矩阵
算法导论 Introduction to Algorithms #数学基础
摘要:数学基础 求和 常用公式 $$ \begin{align*} \sum_{k=1}^nk&=\frac{n(n+1)}2=\Theta(n^2)\ \sum_{k=1}^nk^2&=\frac{n(n+1)(2n+1)}6\ \sum_{k=1}^nk^3&=\frac{n^2(n+1)^2}4\
排序算法 Sort
摘要:Sort 评价排序算法的标准 时间复杂度 空间复杂度 稳定性:如果一个排序算法能够保留数组中的重复元素的相对位置,则可以被称为是稳定的 冒泡排序 通过两两交换,每次循环都使最值上浮到开头或末尾 关键点在于每次循环结束后都将最值排在开头或末尾 public static void BubbleSort
算法的 union-find 实践
摘要:union-find 各种算法的实现, 为结点数。 | 算法 | connect() | find() | | | | | | quick-find | | | | quick-union | 树的高度(最好时 ,最坏时 ) | 树的高度 | | weighted-
关于二分查找
摘要:二分查找 不同的二分查找 用递归实现的二分查找 static int BinarySearch<T>(IList<T> list, T target) where T : IComparable<T> { return BinarySearch(list, 0, list.Count - 1, ta
C++ 实现链表(单双循环链表)
摘要:单链表 template <typename T> class LinkedList { typedef LinkedList self; typedef T value_type; class Node { friend LinkedList; public: template <typename
压缩算法 Compress
摘要:压缩算法 不存在能够压缩任意比特流的算法 归谬法论证:如果该算法存在,由于比特流为离散值,压缩后的比特流至少比原比特流少一个比特,最终可以是任意小的,这显然是荒谬的 小规模字母表 ASCII 字符由 7 位表示,如果所使用的字符种类不足 65 种就可以用少于 7 位的比特记录每个字符,只需要添加一个
图 Graph
摘要:Graph 引 在线性表中,数据结构是被串起来的,仅有线性关系,每个数据结构只有一个前驱和一个后继,而在树形结构中数据元素之间有明显的层次关系,并且每一层上的数据元素可能和下一层中的多个元素相关,但只和上一层中的一个元素相关。 在许多计算机应用中情况可能会变得更加复杂,由相连的节点所表示的模
散列 Hash
摘要:Hash 我们使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标)相对应,于是用这个数组单元来存储这个元素;也可以简单的理解为,按照关键字为每一个元素"分类",然后将这个元素存储在相应"类"所对应的地方。但是,不能够保
查找算法 Search
摘要:查找算法 顺序查找 最简单形式的顺序查找 public static int LinearSearch<T>(IList<T> list, T target) { for (int i = 0, count = list.Count; i != count; ++i) // 一次比较 i and c
算法导论 Introduction to Algorithms #算法基础
摘要:算法基础 分析算法 循环不变式 设计算法 分治法 练习 线性查找的平均检查次数 最好 1 次,最坏 n 次,平均 次, 。 使任何算法的最好情况运行时间提高的办法 将最好情况总结,并作为算法的特例实现。但是不应该将函数的最好情况作为判
算法基础 Introduction
摘要:算法要求 正确性(Correctness) 语法正确 输入输出(IO)正确 可读性(Readability) 使用注释(不注释比坏注释好,代码易读比过多注释好) 命名契合(camelCase、PascalCase、UnderScoreCase) 健壮性(Robustness) 完善的异常处理(处理非
线性数据结构 Linear
摘要:Linear 数组概述 数组有四种操作:添加、删除、更改和搜索。 读取是数组中最容易、最快的操作,因为数组以顺序的方式存储在内存中。 数组最突出的能力叫做随机读取,即通过一个下标读取值。 int a[] = {3, 1, 2, 5, 4, 9, 2, 7}; printf("%d", a[3]);
递归
摘要:递归 递归是栈的应用之一 举一个斐波那契数列的例子 int Fbi(unsigned i) { if (i < 2) return i; return Fbi(i - 1) + Fbi(i - 2); } 我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数 在高级语言中,