模板
文章平均质量分 75
算法题常见模板
酸菜鱼_2323
这个作者很懒,什么都没留下…
展开
-
算法模板总结(自用)
算法总结问题原创 2023-02-25 14:13:45 · 1375 阅读 · 0 评论 -
Python爬虫和数据可视化
文章目录Python基础知识Python基础变量及类型标识符和关键字格式化输出输入import导入包判断语句和循环语句条件判断语句循环语句字符串、列表、元组、字典字符串字符串的常见操作列表常见操作元组字典常用操作集合小结函数函数的概念函数定义和调用定义函数调用函数函数参数定义带有参数的函数调用带有参数的函数全局变量和局部变量什么是局部变量什么是全局变量函数使用注意事项调用函数作用域文件操作文件的打开与关闭访问模式写数据读数据文件的相关操作文件重命名删除文件创建文件夹获取当前目录改变默认目录获取目录列表删除文原创 2021-06-17 20:59:57 · 2797 阅读 · 7 评论 -
Seq2Seq-Attention编程实例——机器翻译问题
目录数据处理模块定义模型结构模块使用Seq2Seq-Attention结构数据处理模块数据资源下载:平行语料库http://www.manythings.org/anki首先下载的数据集中有繁体,我们在github上找到一个模型(langconv.py)来处理繁体,将繁体转换成简体langconv.py#!/usr/bin/env python# -*- coding: utf-8 -*-from copy import deepcopyimport retry:原创 2021-05-26 11:07:04 · 468 阅读 · 3 评论 -
中文文本情感分类实战(weibo_senti_100k为数据集)
中文文本情感分类数据准备数据准备使用jieba分词import jiebadata_path = "sources/weibo_senti_100k.csv"data_stop_path = "sources/hit_stopword"data_list = open(data_path,encoding='utf-8').readlines()[1:]#处理停用词stops_word = open(data_stop_path,encoding='utf-8').readlines()原创 2021-05-25 11:02:59 · 4685 阅读 · 4 评论 -
刷题知识点总结(C++)
总结int型的范围int型的范围int的取值范围为: -231——231-1,即-2147483648——2147483647,如果题目中输入的整数不超过1,000,000,000都可以使用int型变量。原创 2020-06-14 23:28:36 · 247 阅读 · 0 评论 -
动态规划总结
总结常见问题总结最大连续子序列和最长不下降子序列(LIS)最长公共子序列(LCS)最长回文子串数塔DPDAG最长路01背包完全背包如何考虑状态转移方程常见问题总结最大连续子序列和 dp[i]表示以A[i]为末尾的连续序列的最大和 dp[i] = max(A[i] , dp[i-1]+A[i])最长不下降子序列(LIS) dp[i]表示以A[i]结尾的最长不下降子序列的长度 dp[i] = max(1,dp[j]+1) (j = 1,2,3····i-1 && A[j]原创 2020-05-25 19:31:58 · 166 阅读 · 0 评论 -
动态规划五(背包问题)
背包问题背包问题01背包问题完全背包问题背包问题 背包问题包括01背包问题和完全背包问题。01背包问题01背包问题: 有n件物品,每件物品的重量为w[i],价值为c[i]。现有一个容量为V的背包,问如何选取物品放入背包,使得背包内物品的总价值最大。其中每种物品都只有1件。5 8 //n = 5,V = 83 5 1 2 2 //w[i]4 5 2 1 3 //c[i] 令dp[i][v]表示前i件物品(1<=i<=n,0<=v<=V)恰好装入容量为v的背包中原创 2020-05-25 18:51:08 · 396 阅读 · 0 评论 -
动态规划四(DAG最长路)
DAG最长路问题DAG最长路求整个DAG的最长路径(即不固定起点和终点)固定终点,求DAG的最长路径DAG最长路 在图的有关知识中已经了解了DAG就是有向无环图,其中计算最长路(关键路径)的做法非常复杂,这里介绍更简单的方法。求整个DAG的最长路径(即不固定起点和终点)固定终点,求DAG的最长路径。求整个DAG的最长路径(即不固定起点和终点) 给定一个有向无环图,怎样求解整个图的所有路径中权值之和最大的那条。 令dp[i]表示从i号顶点出发能获得的最长路径长度,这样所有dp[i]的最原创 2020-05-25 17:53:54 · 635 阅读 · 0 评论 -
C/C++算法常用头文件
头文件问题这里推荐一个万能头文件给大家#include <bits/stdc++.h> using namespace std; 不过要看考试的评测机支不支持,绝大部分都是支持的。当然,我们还可以留一手,准备一个完整的头文件,在考试开始前敲上去就行。 #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include原创 2020-05-25 12:22:50 · 1054 阅读 · 0 评论 -
C/C++算法常用的输入输出技巧
输入输出技巧转自:https://zhuanlan.zhihu.com/p/93071794输入int型变量 scanf("%d", &x);输入double型变量scanf("%lf", &x);不用float直接double输入char类型变量 scanf("%c", &x);输入字符串数组 scanf("%s", s);输出与输入表示方式一致printf("%s\n", s);scanf输入解析输入日期 2019-10-21int year, month,转载 2020-05-25 12:19:47 · 598 阅读 · 0 评论 -
动态规划三(最大连续子序列和、最长不下降子序列、最长公共子序列、最长回文子串)
动态规划三最大连续子序列和最大连续子序列和 给定一个数字序列A1,A2,…,An,求i,j(1<=i<=j<=n),使得Ai+····+Aj最大,输出这个最大和。原创 2020-05-24 20:04:47 · 784 阅读 · 0 评论 -
图算法专题(四)【拓扑排序】
图算法专题四拓扑排序有向无环图拓扑排序拓扑排序有向无环图 如果一个有向图的任意顶点都无法通过一些有向边回到自身,那么称这个有向图为有向无环图(DAG)。拓扑排序原创 2020-05-23 17:47:49 · 337 阅读 · 0 评论 -
动态规划二(树形DP)
动态规划二什么是树形DP什么是树形DP原创 2020-04-30 18:34:21 · 213 阅读 · 0 评论 -
动态规划一(一般动态规划)
动态规划一什么是动态规划举例:K好数什么是动态规划动态规划(Dynamic Programming,DP)是一种用来解决一类最优化问题的算法思想。将一个复杂的问题分解为若干个子问题,通过综合子问题的最优解来得到原问题的最优解。动态规划会将每个求解过的子问题的解都记录下来(dp数组),这样当下一次遇到的时候就可以直接使用,而不用重复计算。一个问题必须拥有重叠子问题和最优子结构,才能使用动态规划...原创 2020-04-29 19:21:18 · 112 阅读 · 0 评论 -
图算法专题(三)【最小生成树】
最小生成树最小生成树及其性质性质:prim算法基本思想最小生成树及其性质 最小生成树(MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。性质:最小生成树的边数=顶点数-1,且树内没有环。对给定的图G(V,E),其最小生成树可以不唯一,但是其边权之和一定是唯一的。最小生成树的根节点可以是这棵...原创 2020-05-08 15:35:37 · 650 阅读 · 0 评论 -
图算法专题(二)【图论最短路径问题】
最短路径问题定义Dijkstra算法策略:具体实现:Dijkstra伪代码:具体实现代码邻接矩阵表示:C++:邻接表表示:求最短路径本身伪代码邻接矩阵表示:C++:如何求整条路径C++Bellman-Ford算法SPFA算法Floyd算法定义 给定图G<V,E>,求一条从起点到终点的路径,使得路径上经过的所有的边权值之和最小。称为最短路径问题。 常用算法有Dijkstra算法...原创 2020-05-03 18:29:37 · 944 阅读 · 0 评论 -
图算法专题(一)【定义、存储和遍历】
图算法图的定义和相关术语图的存储邻接矩阵邻接表图的遍历使用深度优先搜索(DFS)法遍历图用DFS遍历图DFS的具体实现使用广度优先搜索(BFS)法遍历图用BFS遍历图BFS的具体实现图的定义和相关术语 图由顶点和边组成,每条边的两端都必须是图的两个顶点。记号G(V,E)表示图G的顶点集为V,边集为E。 一般来说,图可以分为有向图和无向图。 顶点的度是指和该顶点相连的边的条数。对有向图来说,顶点的出边条数称为该顶点的出度,顶点的入边条数称为该顶点的入度。 顶点和边都可以有一定属性,而量化的属原创 2020-05-19 17:04:37 · 269 阅读 · 0 评论 -
数据结构——树(六)【哈夫曼树】
哈夫曼树哈夫曼树一些定义构造哈夫曼树哈夫曼编码哈夫曼树一些定义 叶子结点的路径长度:从根结点出发到达该结点所经过的边数。 叶子结点的带权路径长度:把叶子结点的权值×其路径长度 树的带权路径长度(WPL):所有叶子结点的带权路径长度之和。构造哈夫曼树 有一个经典的问题:已知n个数,寻找一棵树,使树的所有叶子结点的权值恰好为这n个数,并且使得这棵树的带权路径长度最小。带权路径长度最小的树被称为哈夫曼树(最优二叉树)。 对同一组叶子结点来说,哈夫曼树可以是不唯一的,单是最小带权路径长度一原创 2020-05-18 22:13:42 · 432 阅读 · 0 评论 -
数据结构——树(五)【并查集、堆】
并查集、堆并查集并查集的定义并查集的基本操作初始化查找合并堆堆的定义与基本操作向下调整建堆删除堆顶元素向上调整添加元素堆排序并查集并查集的定义 并查集是一种维护集合的数据结构,支持合并(合并两个元素)和查找(判断两个元素是否在同一集合)的操作。 并查集使用一个数组来实现的: int father[N]; 其中father[i]表示元素i的父亲结点,而父亲结点本身也是这个集合内的元素(1<=i<=N)。例如father[1] = 2表示元素1的父亲结点是元素2,以这种父系关系来原创 2020-05-18 21:31:27 · 177 阅读 · 0 评论 -
数据结构——树(四)【平衡二叉树】
平衡二叉树(AVL树) 平衡二叉树的定义平衡二叉树的基本操作查找操作插入操作平衡二叉树的定义 平衡二叉树仍然是一棵二叉查找树。平衡是指,对AVL数的任意结点来说,其左子树和右子树的高度之差的绝对值不超过1,其中左子树和右子树的高度之差称为该结点的平衡因子。 由于需要对每个结点都得到平衡因子,需要在树的结构中加入一个变量height,用来记录以当前结点为根结点的子树的高度:struct node{ int v,height;//v为结点权值,height为当前子树高度 node *lchild原创 2020-05-18 19:39:31 · 148 阅读 · 0 评论 -
数据结构——树(三)【二叉查找树】
二叉查找树BST二叉查找树的定义二叉查找树的基本操作查找操作插入操作二叉查找树的建立二叉查找树的删除二叉查找树的性质例子二叉查找树的定义 二叉查找树(BST)是一种特殊的二叉树,又称为排序二叉树、二叉搜索树、二叉排序树。二叉查找树实际是一棵数据域有序的二叉树。二叉查找树的递归定义如下:要么二叉查找树是一棵空树。要么二叉查找树由根结点、左子树、右子树组成,其中左子树和右子树都是二叉查找树,且左子树上所有结点的数据域均小于或等于根结点的数据域,右子树上所有结点的数据域均大于根结点的数据域。二叉查原创 2020-05-17 22:36:55 · 162 阅读 · 0 评论 -
数据结构——树(二)【遍历】
遍历二叉树的遍历先序遍历先序遍历的实现先序遍历的性质中序遍历中序遍历的实现中序遍历的性质后序遍历后序遍历的实现后序遍历序列的性质层序遍历给出遍历序列 重建二叉树例题树的遍历树的静态写法树的先根遍历树的层序遍历二叉树的遍历 二叉树的遍历一般有四种:先序遍历、中序遍历、后序遍历、层次遍历,其中,前三种使用深度优先搜索(DFS)实现,层次遍历使用广度优先搜索(BFS)实现。但是左子树一定先于右子树遍历,所谓的“先中后”是指根结点root在遍历中的位置。先序遍历先序遍历的实现 先序遍历的遍历顺序为根节原创 2020-05-17 19:10:58 · 249 阅读 · 0 评论 -
数据结构——树(一)【树与二叉树】
树树与二叉树树的定义和性质二叉树的递归定义满二叉树完全二叉树二叉树的存储结构与基本操作二叉树的存储结构二叉树结点的查找、修改二叉树结点的插入二叉树的创建树与二叉树树的定义和性质 树的概念:数据结构中把树枝分叉树、树叶、树根抽象为结点(node),其中树根抽象为根节点(root),且对一棵树来说最多存在一个根节点;把树叶概括为叶子结点(leaf);把茎干和树枝同一抽象为边(edge)。树就被定义为由若干结点和若干边组成的数据结构,且在树中的结点不能被边连接成环。根节点置于最上方,然后向下延伸出若干条边原创 2020-05-16 20:22:35 · 418 阅读 · 1 评论 -
搜索专题(DFS和BFS)
搜索专题深度优先搜索(DFS)广度优先搜索(BFS)深度优先搜索(DFS) 总是以“深度”为前进的关键词的搜索称为深度优先搜索(DFS)。深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法。 DFS可以使用递归来实现,递归中的递归式就是岔道口,而递归边界就是死胡同。使用递归时,系统会调用一个系统栈的东西来存放递归中的每一层的状态,因此使用递归来实现DFS的本质还是栈。 有一种通过题目条件的限制来节省DFS计算量的方法称作剪枝(前提是剪枝后算法依然正确)。 列举一类常见的DFS问题:原创 2020-05-16 18:13:17 · 195 阅读 · 0 评论 -
数据结构专题二(链表)
链表处理链表的概念使用malloc函数或new运算符为链表结点分配内存空间malloc函数new运算符内存泄露链表的基本操作创建链表查找元素插入元素删除元素静态链表链表的概念 线性表分为顺序表和链表,顺序表可以理解成“数组”。定义数组时会从内存中划分一段连续地址存放,而链表则由若干个结点组成,且存储位置不连续。链表的两个结点之间一般通过一个指针来从一个结点指向另一个结点,因此链表的结点一般由两部分组成,即指针域和数据域:struct node{ typename data;//数据域 node*原创 2020-05-15 22:03:42 · 208 阅读 · 0 评论 -
数据结构专题一(栈和队列)
栈和队列的应用栈栈的定义栈的常见操作队列队列的应用队列的常用操作例题思路栈栈的定义 栈是一种后进先出的数据结构。 栈顶指针是始终指向栈的最上方元素的一个标记,当使用数组实现栈时,栈顶指针是一个int型的变量(数组下标从0开始),通常记为TOP;当使用链表实现栈时,则是一个int*型指针。栈中没有元素(栈空)时令TOP为-1。栈的常见操作清空(clear)栈的清空操作将栈顶指针TOP置为-1,表示栈中没有元素 void clear(){ TOP = -1; }获取栈内元素个原创 2020-05-15 21:08:29 · 164 阅读 · 0 评论 -
组合数
组合数组合数的计算如何计算C(n,m)组合数的计算 组合数Cnm是指从n个不同的元素中选出m个元素的方案数,一般也可以写成C(n,m),其定义式为Cnm = n!/ m!(n-m !),由三个整数的阶乘得到。 通过定义可以知道,组合数满足Cnm = Cnn-m,且有Cn0 = Cnn = 1成立。如何计算C(n,m) 可以通过递推公式计算,C(n,m)表示从n个数中挑选m个数的方案数,因此可以转换为:①不选最后一个数,从前n-1个数中选m个数;②选最后一个数,从前n-1个数中选m-1个数。得原创 2020-05-13 19:51:24 · 731 阅读 · 0 评论 -
大整数的运算(高精度)
大整数的运算大整数的存储高精度加法高精度减法高精度与低精度的乘法高精度和低精度的除法对一道A+B的题目,如果A和B的范围在int范围内,计算很简单,但是如果A和B是有着100个数位的整数,就无法利用已有的数据类型来存储。大整数又称为高精度整数,其含义就是用基本数据类型无法存储其精度的整数。大整数的存储 使用数组即可。例如定义int型数组d[1000],那么这个数组的每一位就代表了存放的整数的每一位,如整数235813存储到数组中,则有d[0] = 3,d[1] = 1,d[2] = 8,d[3] =原创 2020-05-13 18:33:56 · 321 阅读 · 1 评论 -
素数
素数判断素数获取素数表判断素数 素数又称为质数,是指除了1和本身之外,不能被其它数整除的一类数。1既不是素数,也不是合数。 如何判断给定的正整数n是否是素数呢? 如果在2~n-1之间存在n的约数,设为k,即n%k = 0,那么k*(n/k) = n,即n/k也为n的一个约数,且k与n/k中一定满足其中一个≤sqrt(n),另一个≥sqrt(n)【sqrt(n)为根号n】。所以只要判定n能否被2,3,…,|sqrt(n)|中的一个数整除,即可判定n是否为素数。bool isPrime(int原创 2020-05-12 20:04:29 · 172 阅读 · 0 评论 -
排序问题合集二(归并排序、快速排序)
排序合集二归并排序快速排序选择第K大数归并排序 最基本的归并排序为 2-路归并排序。它的原理是,将序列两两分组,将序列归并为 ⌈n/2⌉ 个组(向上取整),组内单独排序;然后再将这些组两两归并,生成 ⌈n/4⌉ 个组,组内再单独排序;以此类推,直到只剩下最后一个组为止。 我们采用递归的写法,只需要反复将当前区间[left,right]分为两半,对两个子区间[left,mid]与[mid+1,right]分别递归进行归并排序,然后将两个已经有序的子区间合并为有序序列即可。const int max原创 2020-05-12 18:23:18 · 189 阅读 · 0 评论 -
排序问题合集一(冒泡排序、选择排序、插入排序,排序题与sort函数)
排序冒泡排序 冒泡排序的本质在于交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。 有n个数字,排序执行n-1趟,每一趟从左到右依次比较相邻的两个数,如果大的数在左边,则交换这两个数,当该趟结束时,该趟最大数被移动到当前剩余数的最右边。#include<cstdio>int main(){ //将n个数进行排序,先读入n个数 int n; scanf("%d",&n); int a[n]; for(int i =0;i原创 2020-05-10 17:42:36 · 333 阅读 · 0 评论 -
two pointers思想(序列合并问题)
two pointers思想什么是two pointers思想序列合并问题什么是two pointers思想 给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得它们的和恰好为M,输出所有满足条件的方案。 如果直接两重循环会使复杂度过高,two pointers思想利用序列递增性质,来降低复杂度。如果a[i]+a[j] > M,那么a[i]+a[j+1]一定 >M,同时a[i+1]+a[j]也一定 >M。具体针对本题的算法如下: 令下标i的初值为0,原创 2020-05-12 17:11:18 · 172 阅读 · 0 评论 -
二分(二分查找、解方程)
二分问题二分查找解方程二分查找 如何在一个严格递增序列A中找出给定的数x。比依次扫描更好的办法是使用二分查找。二分查找是基于有序序列的查找算法,该算法一开始令[left,right]为整个序列的下标区间,然后每次测试当前[left,right]的中间位置mid = (left+right)/2,判断A[mid]与欲查询元素x的大小:如果A[mid] == x,则说明查找成功,退出查询。如果A[mid] < x,则说明元素x在mid的右边,因此left = mid+1,在区间[mid+1,r原创 2020-05-12 16:05:23 · 663 阅读 · 0 评论 -
全排列问题(递归思想)
一般把1~n这n个整数按某个顺序排放的结果称为这n个整数的一个排列,而全排列是指这n个整数能形成的所有排列。原创 2020-05-12 14:51:46 · 331 阅读 · 0 评论 -
hash散列
基本散列以空间换时间,快速查找bool hashTable[maxn] ={false};可以初始化每个数在N个整数中未出现过,如果出现了x就令hashTable[x] = true。这样直接查找对应的hashTable的bool值就可以知道每个数是否出现过。如果是统计出现次数,则使用:int hashTable[maxn] = {0};如果出现了x就令hashTable[x] ++最后表中每个数对应下标的值就是出现的次数。字符串hash当hashTable[key]的key不为整数时,如原创 2020-05-11 19:43:47 · 170 阅读 · 0 评论 -
字符串处理(回文串、逆序输出字符串)
字符串处理回文串将一个字符串中单词逆序输出回文串读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或“noon”就是回文串。假设字符串str的下标从0开始,由于“回文串”是正读和反读都一样的字符串,因此只需要遍历字符串的前一半(不需要取到i==len/2), 如果出现字符str[i]与字符str[len-1-i]对称位置不相等。说明这个字符串不是“回文串”;反之则是“回文串”。//判断字符串str是否是回文串bool judge(char str[]){原创 2020-05-11 17:47:58 · 449 阅读 · 0 评论 -
进制转换
进制转换① 将P进制数x转换为十进制数y②将十进制数y转换为Q进制数z对两个不同进制,应该如何进行相互转换?对一个P进制的数,如果要转换为Q进制,需要分为两步:① 将P进制数x转换为十进制数y对一个十进制的数y = d1d2·····dn,它可以写成这个形式: y = d1* 10n-1+d2*10n-2+···+dn*100同样的,如果P进制数x为a1a2···an,那么它写成下面这个形式之后使用十进制的加法和乘法,就可以转换成十进制数y: y =a1*Pn-1+a2*Pn-2+····原创 2020-05-11 15:10:28 · 382 阅读 · 0 评论 -
日期处理
日期处理举例日期差值星期几 日期处理的问题,一般会需要处理平年和闰年(二月天数区别)、大月和小月的问题。举例日期差值有两个日期,求两个日期之间的天数,如果两个日期是连续的,则规定它们之间的天数为两天。输入格式:有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD。输出格式:每组数据输出一行,即日期差值样例输入:2013010120130105样例输出:5思路: 不妨假设第一个日期早于第二个日期(否则就交换位置)。 这样求日期之间相差天数,就可以用第一个日原创 2020-05-10 21:14:28 · 220 阅读 · 0 评论 -
最大公约数和最小公倍数
数学问题最大公约数最小公倍数最大最小公倍数最大公约数正整数a与正整数b的最大公约数是指a与b的所有公约数中最大的那个公约数,例如4和3的最大公约数是2, 3和9的最大公约数是3。一般用gcd(a , b)来表示a和b的最大公约数,求解通常使用欧几里得算法(辗转相除法)。定理:设a、b均为正整数,则gcd(a,b) = gcd(b,a%b)同时要求,如果a<b,要将a和b交换,即上述...原创 2020-04-29 17:40:04 · 240 阅读 · 0 评论 -
贪心算法(一般贪心、区间贪心)
贪心引用《算法笔记》内容简单贪心贪心是求解一类最优化问题的方法,它总是考虑在当前状态下局部最优(或较优) 的策略,来使全局的结果达到最优(或较优)。显然,如果采取较优而非最优的策略(最优策略可能不存在或是不易想到),得到的全局结果也无法使用最优的。而要获得最优结果,则要求中间的每步策略都是最优的,因此严谨使用贪心法来求解最优化问题需要对采取的策略进行证明,证明的一般思路是使用反证法及数学...原创 2020-04-29 16:52:37 · 446 阅读 · 0 评论