算法
jjegoing
这个作者很懒,什么都没留下…
展开
-
并查集quick union实现
并查集quick union实现将每个元素看成一个节点,每个节点都指向一个节点,当一个节点为根节点时其指向的节点为自身.连接节点7和3,即找到7的根节点5和3的根节点2,将根节点5指向2.即将节点7和节点2连接在了一起.在这种实现下,判断两个节点是否连接,只需要找到两个节点的根节点是否相同即可由于每个节点只会指向一个节点,根节点指向自身,所以可以用数组即可实现,数组记录每个节点指向的节点是什么.`class uf2 :uf{public: uf2(int n) {原创 2021-11-29 16:09:57 · 123 阅读 · 0 评论 -
并查集及其quickfind实现
并查集解决连接问题连接问题只解决两个节点是否连接,并不能得到两个节点之间的路径.如果只需要知道两个节点是否连接而不需要知道两个节点之间的路径的话,并查集是一种很好的数据结构.并查集的主要支持的操作1.union(p,q) 将pq两个节点连接起来(注意,需要将p,q两个节点所在的所有节点全部连接起来)2.isconnected(q,p) 判断两个节点是否连接并查集的常见实现class uf{ virtual int getsize()=0 ; virtual void u原创 2021-11-16 14:13:31 · 453 阅读 · 0 评论 -
动态规划背包问题
动态规划背包问题问题大多如下一个背包总沉重固定为多少kg有一堆物品,每个物品都有价格和重量在不撑爆背包的情况下,能装走的最多物品的价格或者重量例题如下背包问题开的数组一般都和背包的总承重有关题解:对于每个物体,需要知道是否能拼出重量w([0,m])对于最后一个物体,看它是否可以进入背包如果除了最后一个物体,其他物体能拼出重量w,或者其他物体能拼出w-a[n-1],即最后一个物体拿与不拿的时候能拼出的重量.[0,m]中能拼出的最大重量即为能带走的最大重量问题分析算知道前n原创 2021-11-09 10:50:44 · 252 阅读 · 0 评论 -
判断回文子串
给定一个字符串找到里面所有的回文子串一个回文串,要么是奇数长度,要么是偶数长度.奇数长度的回文串对于奇数长度来说,可以把字符串的每个元素作为中间的那个元素,然后向两边扩展(元素相同就扩展),字符串的每个元素都可以作为中间元素,总共需要判断n次.偶数长度的回文串对于奇数长度来说,可以把字符串的两个元素中间的线作为中心,然后向两边扩展(元素相同就扩展),字符串的两个元素中间的线都可以作为中间元素,总共需要判断n-1次.经过上述两种操作,可以找出所有长度为奇数和偶数的回文串,回文串要么是奇数,或者偶数原创 2021-10-29 15:24:44 · 549 阅读 · 0 评论 -
快速排序C++实现
#include <iostream>#include<algorithm>#include"testsorthelp.h"using namespace std;//快速排序(和归并排序类似,也是把数组一分为2的过程),每次都选择一个元素,把他放到排序后这个元素应该在的位置上,再对该标定点左边和右边的//元素分别进行排序。(分出来的数组可能一大一小,不是平均分配)直到整个数组有序。#pragma region 待排序第一个元素为标定点template<typen原创 2021-10-11 13:54:36 · 84 阅读 · 0 评论 -
Lru(最近最久未使用)算法
LRU算法leetcode 146最近最久未使用页面置换算法系统上选择距离当前页面使用时间最长的页面予以淘汰局部性原理:较长时间未使用的页面,可能不会马上用到通常使用栈来组织各个驻留页,栈底放最常时间未使用的,栈顶放最近使用的。当加入的元素超过缓存数量,即页框长度时,选择将栈底的元素换出,将新放入的元素放在栈顶.| 页号 |7|0|1|2|0|3|0|4|| 帧1 |7|0|1|2|0|3|0|4|| 帧2 | |7|0|1|2|0|3|0|| 帧3 | | |7|0|1|2原创 2021-09-22 14:56:08 · 1165 阅读 · 0 评论