- 博客(7)
- 收藏
- 关注
原创 python算法模板第二部分(2)(Trie树、并查集、堆、哈希表、字符串哈希法)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.Trie树思想:Trie树是用于快速存储和查找字符串集合的数据结构。一般情况下,字符串要么只有小写、要么只有大写、要么只有数字,不会同时出现太多情况,否则分叉太多,搜索慢。常见操作:1.insert向集合中插入一个字符串 x(存储)2.query询问一个字符串在集合中出现了多少次(查找)模板:N = 100010idx = 0son = [[0] *
2021-07-18 16:55:15
412
原创 python算法模板第二部分(1)(单链表、双链表、模拟栈、模拟队列、单调栈、单调队列、KMP算法)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.单链表思想:本部分将使用数组实现链表操作,而不使用指针。数组e用于存放链表值(val),数组ne用于存放下一个链表节点(next),index用于存下标。常见操作:1.向链表头插入一个数2.删除第 k 个节点后的节点3.在第k个节点后插入一个节点注:第 k 个节点并不是指当前链表的第 k 个数,而是第k个插入链表的数(即下标为k的数)模板:N = 100
2021-07-13 17:59:26
330
1
原创 局部加权线性回归、最小二乘、逻辑回归、牛顿法
一、局部加权线性回归由来及原理原始线性回归目标函数:J(θ)=12Σi=1m(hθ(x(i))−y(i))2J(θ) = \frac12Σ_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)})^2J(θ)=21Σi=1m(hθ(x(i))−y(i))2局部加权线性回归目标函数:J(θ)=12Σi=1mω(i)(hθ(x(i))−y(i))2J(θ) = \frac12Σ_{i=1}^{m}\omega ^{(i)}(h_θ(x^{(i)}) - y^{(i)})^2J(θ)=2
2021-07-09 21:45:01
699
4
原创 python算法模板第一部分(3)(双指针、位运算、离散化、区间合并)
1.双指针思想:朴素的两重循环需要O(n2n^2n2),可以利用某种性质(i和j之间的单调关系)将其变为O(n)。可用于单序列和双序列。单序列中可用于维护一段区间,双序列中用于维护某种次序,如有序序列的合并。模板:# 朴素做法(用于对比):for i in range(n): for j in range(i): if check(j, i): res = max(res, j - i + 1)# 双指针做法:for j in range(n): while i <=
2021-07-09 14:09:20
381
原创 python算法模板第一部分(2)(前缀和与差分)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。其中部分参考了acwing众多大佬的题解。1.一维前缀和思想:原数组 a1a2...ana_1 a_2...a_na1a2...an前缀和 Si=a1+a2+...+aiS_i = a_1 + a_2 + ... + a_iSi=a1+a2+...+ai (下标从1开始方便计算),定义S0=0S_0 = 0S0=0前缀和的作用:快速求出原数组中一段数的和。例如,求 [l, r] 区间内数组a
2021-07-06 22:33:02
1644
6
原创 线性回归与梯度下降、正规方程
前提m行数据,n列特征数学模型hθ(x)=Σj=0nθjXj(X0=1)h_θ(x) = Σ_{j=0}^{n}θ_jX_j(X_0=1)hθ(x)=Σj=0nθjXj(X0=1)目标函数J(θ)=12Σi=1m(hθ(x(i))−y(i))2J(θ) = \frac12Σ_{i=1}^{m}(h_θ(x^{(i)}) - y^{(i)})^2J(θ)=21Σi=1m(hθ(x(i))−y(i))2任务寻找θθθ使J(θ)J(θ)J(θ)最小方法方法一、梯度下降(Gra
2021-07-06 12:33:58
245
原创 python算法模板第一部分(1)(快速排序、快速选择、归并排序、整数二分、实数二分)
注:本文是在学习了acwing的算法基础课后撰写,主要用于记录python版本算法的模板。1.快速排序思想:用列表中的一个数(pivot)来分割列表,左侧的数都小于pivot,右侧的数都大于pivot。步骤:1.确定pivot。左、右、中点、随机都可以,选择不同代码上可能有细微区别。这里选择中点。2.调整pivot左侧和右侧的数,使左侧的数都小于pivot,右侧的数都大于pivot。利用双指针。3.递归处理左、右两段。模板:def quick_sort(nums, start, end):
2021-07-06 12:32:31
868
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人