Algorithm
文章平均质量分 64
Algorithm
oneslide
时代是浮躁的,心之所向,日积月累,愈久弥坚,大器晚成。
展开
-
拓扑排序图解-Kahn算法和深度优先搜索
是将一个中的每个节点按照依赖关系进行排序。比如图G存在边uv代表v的依赖u, 那么在拓扑排序中,节点u一定在v的前面。Gvvu拓扑排序能够在OVE的线性时间内完成,分为两种算法-Kahn算法和深度优先搜索。原创 2023-12-25 16:45:39 · 1299 阅读 · 1 评论 -
并查集-- 一种路径压缩实现
并查集数据结构学习原创 2023-05-11 15:14:36 · 530 阅读 · 0 评论 -
单链表归并排序 --自底向上 & 自顶向下
引入一个指针dummy作为链表的头节点,prev作为这个链表的最后一个节点。[dummy, prev]之间的元素全是局部有序的。局部如何有序,取决于intv的长度。比如当intv =1 时,先排序3和4,组成一个局部有序区间[3,4] 追加到prev后面,prev指向4;那么经过第一轮合并,dummy链表是两两有序的。那么下一轮,就可以开始合并两个元素的子链表了。再排序2和6时,组成一个局部区间[2,6], 追加到prev后面,prev指向6.通过合并排序将两个有序链表合并成一个是比较简单的。原创 2023-03-15 18:08:10 · 418 阅读 · 0 评论 -
数据结构: 最小栈
最小栈的特色是保持栈后进先出的特性,同时能够以O(1)复杂度获得当前栈的最小值。栈是比较好实现的,直接搞个链表,从头部删除和添加即可。最小栈的核心逻辑是:因为栈是后进先出的,因此栈顶元素之下的数字永远在栈顶元素之后弹出。那么当前栈中的最小值, 在栈插入每个元素的过程中,对比一次即可确定下来。但是在某个元素弹出后,栈中最小值有可能就变了。其最小值的变化和栈顶元素的变化是同步的。因此,可以引入一个辅助栈,: 辅助栈中的每个元素存储对应主栈中某个元素作为栈顶时的最小值。原创 2023-03-02 16:36:36 · 442 阅读 · 0 评论 -
一次遍历实现反转链表
定义一个ListNode变量。定义一个ListNode变量。,永远指向旧链表被拆剩的头。,永远指向新链表的头。原创 2022-12-30 21:49:50 · 147 阅读 · 0 评论 -
中心性算法
Centrality Algorithms中心性算法有三种不同指标,对这三种指标进行研究可以回答三个不同的问题。在社会上,有哪些具备影响力,有头有脸那样的一些人物?(Degree Centrality)在同一个圈子里,谁是“万事通”,“包打听” (Closeness Centrality)在不同圈子里,谁可以当破冰的“中间人”。(Betweenness Centrality)Degree Centrality这个非常好理解,在社交网络形成的图里面,哪个人的好友最多,哪个人就具备更强的影原创 2021-09-29 10:46:36 · 2028 阅读 · 0 评论 -
PAT- Emergency-1
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376首先说下我踩到的一个坑: for (int i = 0; i < RoadNum; i++) { vector<int> temp = roadInfo.at(i); //这里绝对是深拷贝,所以不如新建一个...原创 2018-10-24 10:49:49 · 271 阅读 · 0 评论 -
PAT题库第一题:格式化输入
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400题目代码:编程语言一定使用C++,C也可以,不嫌麻烦的话。// Cprimer.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#i...原创 2018-10-22 14:58:02 · 1074 阅读 · 0 评论 -
Graph-Example1-全部最短路径
全部最短路径的表示方式如果用树来表示图中点A到点B的最短路径,从每个叶子节点B,往上追溯可以获取到其中一个最短路径。即对树进行DFS遍历可以找到全部最短路径。那么这个树会有什么特点?1. 树的根点都是A,叶子节点是B2. 叶子节点的父节点,即叶子节点B。(因为图全部边的权重>1)3. 如果相同的节点层数不同,则将相同的节点从树中剥离形成的子树也满足上面两个特性。 比如下图就不合法,因为其子树(即节点1->3的最短路径树不满足特性2,不合法)4. 如果相同的节点层数相同,其父节点原创 2020-11-16 15:49:11 · 632 阅读 · 0 评论 -
手撸跳表
原理参考:https://www.cnblogs.com/thrillerz/p/4505550.html下面我来手撸一个跳表,我已经上传到github跳表的主要特征(1) 由很多层结构组成(2) 每一层都是一个有序的链表(3) 最底层(Level 1)的链表包含所有元素(4) 如果一个元素出现在 Level i 的链表中,则它在 Level i 之下的链表也都会出现。(5) 每...原创 2020-05-07 21:52:59 · 352 阅读 · 0 评论 -
动态规划练习
钢条切割问题1. 子问题划分:如果长度为n的最优解为pnp_npn,那么长度为n+1的最优解是:maxi=1n+12pi+pn+1−i \max_{i=1}^{ \frac{n+1}{2}}p_i+p_{n+1-i}i=1max2n+1pi+pn+1−i因为全局最优解必定是两个最优解的和。则求解两个子问题n=i和n=n+1-i即可。2. 求子问题最优解初始的话,我们有...原创 2020-03-19 14:35:57 · 114 阅读 · 0 评论 -
BRE正则表达式
正则表达式为正则表达式引擎所解释,实际上为有限状态机实现(DFA)特殊含义字符. * [ ] ^ $ { } \ + ? | ( )特殊含义字符需要被转义符( backslash character (\))转义(escape)用例: \\+第一个转义符转义转义符(\),第二字符转义特殊字符+特例:前向斜线/,也需要被转义插入字符^^ (caret) 匹配以指定模式开...原创 2019-02-01 16:02:11 · 702 阅读 · 1 评论 -
Paxos
Paxos是一个较为基础的分布式算法。基本PaxosPhase 1:Prepare & PromiseProposer向全部Acceptors发送消息,消息内容是提议序列号,PrepareID;Acceptor收到消息,会比较上次接收的PrepareID,如果此消息中的提议序列号比较小,可以忽略或发送否认;如果比自己历史接收过的序列号大,就发送Promise,保证自己会在Prop...原创 2019-08-21 09:56:26 · 563 阅读 · 0 评论 -
LSM
So磁盘的随机读写性能要远远低于顺序读写。现在的B+数在每次数据插入(写操作)都要更新索引,引起额外的写操作。所以,对于大型数据集的场景(写多读少,随机读更少)不太合适。Google发表了一篇论文(10年前)参考文献2,引入了LSM树,其基本思想就是将随机写改为顺序写,而适当牺牲读性能。基本思路一条数据插入时,写入到一个文件(成为Store File)中。文件是只能追加的。数据在一个文件...原创 2019-07-16 19:59:39 · 311 阅读 · 0 评论 -
Java实现常用排序&思考
有个公司面试需要考数据结构,我都快忘了,写工程代码很少能够接触到这个东西…温故而知新,我在实现过程中有了新的思考写个常用随机数生成器,又来生成随机数,用于后续排序/**@param len 数组长度@param rstart 范围下界@param rend 范围下界**/public class RandomArrayGenerator { public static int...原创 2019-03-08 14:39:49 · 99 阅读 · 0 评论 -
c语言结构体实验记录1
typedef struct computer { int computerset;//机位号 int state[6]; //机位的占用状态,占用为1,空置为0.共6个时间段} c;结构体运行成功:c com[3] = { { .computerset =1, . state = {0,0,0,0,0,0} } } ;原创 2016-06-26 09:06:23 · 1006 阅读 · 0 评论 -
Euclidean great common factor
#include <stdio.h>int fix(int m, int n);int main(){ int m1, n1,factor; printf("input the m and n with space to separate:"); scanf("%d%d",&m1,&n1); if (m1 > n1) { factor=fix(m1,原创 2016-10-28 18:27:49 · 342 阅读 · 0 评论 -
Google PageRank算法学习
PageRank是计算网页重要性的一种算法。基本原理: 一个网页会链接向其他的网页,这个网页的PR值(评价网页重要性程度的量纲),是链接本网页的所有网页加权和。权值基本上是链接网页的PR值。接下里以具体例子来说明PageRank算法 加入这里有四个网页,A,B,C,D.网页间链接关系用非对称矩阵来表示。 用矩阵E来表示他们之间的连接关系: E=⎡⎣⎢⎢⎢原创 2017-08-25 22:43:02 · 704 阅读 · 0 评论 -
面向对象实现N维数组申请
在c语言中利用指针实现2维数组申请,三维数组的申请就会出现编译错误;java面向对象的特性可以实现这一点。 加入我们申请一个N维数组,那么每个最基本的点我们可以起名为MDpoint对象(muti-dimension point): public class MDpoint<T>{ private int coor[dimension];//点的坐标 privat原创 2016-12-06 23:02:20 · 1054 阅读 · 0 评论 -
哈希表基础
今日拜读算法导论,尤感才疏学浅,但愿捡拾精要,以备后用哈希表的最终目的是加速查询速度。两种基本数据结构-数组和链表各有千秋, 数组访问速度快,链表插入删除快,哈希目的就是走中庸之路,使两者皆优,但 又不走极端。这是一个基本思想,为了一点性能的提升而花费巨大的成本是不合算的。两种结构,链表法和开放寻址法。 链表法结构较复杂,操作简单。开放寻址法结构简单,空间需求小,而操作复杂。...原创 2018-08-26 12:18:07 · 361 阅读 · 0 评论 -
B树初识
《算法导论-高级数据结构》读书笔记,原本想了解一下数据库索引的组织形式。文字是很抽象的,我想做个图直观的表示B树的性质,这篇短文只是描述B树是什么,而不谈B树的操作,有待后续。类似二叉搜索树,你所看到的每个矩形是一个节点,矩形中的白色正方形为一个关键字。关键字为分隔点,将其子代的节点的关键字范围划分为大于于当前关键字小于等于下一个关键字。其中cic_ici指向其子节点的引用类型。...原创 2018-09-22 09:26:48 · 167 阅读 · 0 评论 -
B树为什么具有相同的深度?
B树的分裂行为导致了B树具有相同的深度。不过要清楚的知道这一点,要从节点从0到节点变满,到第一次有分层,知道深度不断增大的流程开始,直接上图:首先是一个空的根节点:然后第一次有了第一个关键字:由于其节点元素大小不是我的观察重点,所以用e代替,用\代表空假如我们的B树最小度数为t,那么一直插入关键字的话:先根节点称为一个满节点:------------------------...原创 2018-09-22 12:29:46 · 1279 阅读 · 0 评论 -
单节点对所有最短路径----一个暂且认为的伪码
PAT-1003试题地址:https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376这个题真的非常良心,我恶补算法导论图论章节才想到这个方法,还未实现,但记录下伪码:在指定图G&amp;amp;amp;amp;lt;V,E&amp;amp;amp;amp;gt;G&amp;amp;amp;amp;lt;V,E&amp;amp;amp;原创 2018-10-25 22:02:27 · 420 阅读 · 0 评论