摘要:
用途 用于子串的匹配问题 子串匹配 描述 串A中是否包含串B 解法 1. 暴力匹配 1. 从头一个个比较,直到B的末尾。复杂度 O(mn) 2. kmp 1. 构建next数组,前缀匹配后缀的长度。 2. 在匹配失败的时候根据next[i]的值进行跳跃式前进。 3. 为什么要使用next进行前缀匹配 阅读全文
摘要:
不需要记录层次 需要记录层次 阅读全文
摘要:
题目 在学习数据结构的过程,一定会遇到这样一道题目,海量数据中查找前k个最大/最小的数,LeetCode题目 "面试题40. 最小的k个数" :输入整数数组 ,找出其中最小的 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 解题思路 入门级 1. 整体排 阅读全文
摘要:
基本思想 k近邻算法用于分类,训练数据离散的分布在n维空间中,当有一个未知类别新数据到来 1. 在n维空间中找到和他最近的k个点(最相似的 2. 这k个点按照类别划分,成员最多的类别代表新数据的类别,起到预测的效果。即近朱者赤近墨者黑。 距离度量 上诉思想中需要寻找最近的点,通常使用欧式距离 分类决 阅读全文
摘要:
目的 基于快速排序对数组进行排序,数组元素可以是结构体。 前提 qsort属于内置函数,需要包含头文件 stdlib.h 函数原型 用户自定义函数 指明具体的比较对象 结构体排序 多级排序 用于结构体内有多个成员时,当x相同时,比较y,以此类推即可。 调用 阅读全文
摘要:
基本思路 每天卖出股票的最优价格 == 之前最低价格和当天价格的差值 阅读全文
摘要:
快速排序 无需额外的空间,直接在原有的序列上完成排序,相对的是归并排序,在合并的时候需要额外的空间 divide: 选取一个轴,依据轴将数组划分为大于轴和小于轴两部分 递归主要是为了找到划分点的下标 无需进行合并,因为是在原数组上进行的排序 伪代码 QUICKSORT(A, p, r) if p u 阅读全文
摘要:
原理:分块矩阵乘法,进行8次矩阵乘法,时间复杂度为 $\theta(n^3) = \theta(n^{\lg{8}}) $ , 改进后仅需要7次乘法, 时间复杂度为 $\theta(n^{\lg{7}})$ 具体推到见算法导论中利用主定理推导时间复杂度 阅读全文
摘要:
归并排序 归并的排序的核心在于合并,递归到底一个数字自然有序 python python def merge(A, p, q, r): L = A[p:q+1] R = A[q+1:r+1] L.append(float("inf")) R.append(float("inf")) i = 0 j 阅读全文
摘要:
插入排序 将目标元素插入到前方有序序列中合适的位置,插入一次,有序序列长度加一,就是你打牌整理牌序的过程。 伪代码 python c++ c++ include using namespace std; int main() { int A[] = {5,2,4,6,1,3}; cout = 0 & 阅读全文