- 博客(36)
- 收藏
- 关注
原创 【PTP单播协商部分】
LiunxPTP协议栈学习第三章流程图:初始化struct port *port_open(const char *phc_device, int phc_index, enum timestamp_type timestamping, int number, struct interface *interface, struct clock *clock)``````c if (number &&
2022-08-31 14:17:00
839
原创 LIUNXPTP代码学习(时钟同步分析)
这部分主要讲解时钟如何利用偏移量和延时进行时钟同步。1)时钟同步的计算在slave接受sync后,会进行时钟同步的计算(这里会用到函数proxess_sync->port_synchronize->clock_synchronize)。2)时钟同步分为两个步骤,第一个频率同步,第二个相位同步(又称时间同步)注:对于计算offset函数,如果一开始slave处理sync函数时由于t3或者delay_flilter_vaild=0,则不会计算出offset,因此这时候不会进行时钟同步,需要计算出de
2022-06-06 22:06:37
1790
2
原创 【liunxptp协议栈详解第一部分】
liunxptp 代码学习PTP协议栈详解场景一延迟机制的基本原理协议栈的过程场景一当我们配置时钟A为OC且一个端口为master,一个时钟B为BC,一个端口为slave,且延迟机制为E2E。延迟机制的基本原理延迟机制的算法方式协议栈的过程一、step 1: master->slave(sync报文的发送和sync的follow_up报文的发送)int clock_poll(struct clock *c){ int cnt, i; enum fsm_event event;
2022-04-11 21:25:33
2074
2
原创 WSL配置git环境
1)首先第一步我们microsoft store搜索Ubuntu。2)我们点击第一个软件下载。3)当我们运行软件时,可能出现无法运行的状况。进入控制版面程序与功能内。我们勾选适用于Liunx的Windows子系统下。然后重启。这时候就可以打开Ubuntu软件。4)继续进行配置中,我们设置好用户名和密码,来进行SSh key的配置。apt install ssh(安装ssh软件,这里提前说明有的Ubuntu可能已经就有了,无需下载)接下来生成ssh keyssh-keygen -t rs
2021-03-23 19:56:46
959
原创 计算机网络
计算机网络(持续更新中)基础知识速率相关指标三级目录基础知识速率相关指标带宽:用来表示网络通信线路传输数据的能力,通常是指单位时间从网络中的某一点到另一点所通过的”最高数据率“。单位是b/s,kb/s ,Mb/s,Gb/s。吞吐量:表示在单位时间内通过某个网络的数据量。单位时间b/s,kb/s,mb/s等;吞吐量受网络的带宽或者网络的额定速率的限制;带宽和吞吐量的区别:带宽是单位时间通过数据量的上限,但是吞吐量为变化的。比如家里安装宽带为100Mb/s,这里指的是带宽,但是实际为20Mb/s。
2021-02-21 16:49:46
123
原创 数据结构基础代码
数据结构排序算法冒泡算法插入排序选择排序归并排序快速排序堆排序拓扑排序总结链表结构图二叉树排序算法冒泡算法插入排序选择排序归并排序快速排序堆排序拓扑排序总结链表结构图二叉树一、排序算法1)冒泡排序#include <cstdio>int A[7] = {1,5,2,6,7,8,9};int main(){ for(int i = 0; i < 6; i++) { for(int j = i; j < 7; j++)
2020-12-28 20:31:11
1508
原创 最小的k个数
题意:这里只要排序就可以找出最小的k个数,但是注意如果容器存储的数没有k个数,则返回空;class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int>output; if(k > input.size()) return output; sort(input.begin.
2020-12-22 20:31:55
54
原创 实现二叉树的先序,中序,和后序遍历
题意:先序、中序、后序,分别为根左右,左根右,左右根;/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: /** * * @param root TreeNode类 the root of binary tree * @return int整型vector<ve.
2020-12-22 20:27:54
163
原创 二分查找
方法:用二指针法:class Solution {public: /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 查找值 * @param a int整型vector 有序数组 * @return int整型 */ int upper_bound_(int n, int v, vector<int>& a) { // write code.
2020-12-20 15:09:43
65
原创 判断链表中是否有环
这里可以使用使用unordered_set,避免排序;当我们迭代链表是,当一次查找这个地址,发现set中有,那么我们判断这里有环;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: b.
2020-12-20 14:03:15
73
原创 设计LRU缓存结构
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。这里可以模仿队列,先进先出;题意:如果第一个数为1,为插入,当内存大于设定的K值时,把最不常用的删除,以为队首;如果第二个数为2,寻找key值相同的数,把他变成最常用的,把它删除,再把它插入;class So.
2020-12-20 13:55:47
77
原创 反转链表
这里是写一个反转链表,利用头插法;把之前的链表依次循环,插在新建的节点之后,他的新节点为这个节点的下个节点;class Solution {public: ListNode* ReverseList(ListNode* pHead) { ListNode *pnew = new ListNode(-1); ListNode *cur = pHead; while(cur != NULL) { ListN.
2020-12-18 20:33:58
69
1
原创 1148 Werewolf - Simple Version (20分)
题意:有两个说谎者。至少有一批狼说谎,但是不超过所有狼,因此,我们遍历狼的个数,让遍历狼身份为-1,正常人为1,再对照他们说的话,判断是否有两个说谎者,且不全为狼;#include <vector>#include <iostream>#include <cmath>using namespace std;int adj[108];int main(){ int N; cin >> N; for(int i = 1; ...
2020-12-17 09:47:44
74
原创 1152 Google Recruitment (20分)
题意:给出两个数,第一个数是数的位数N。第二个数是从第一个数开始一次往后的K个数,如果该数是素数,则输出,否者输出404;这里需要注意,PAT中字符转整形用stoi,对于字符数组用atoi不能用;#include <cstdio>#include <cmath>#include <iostream>#include <string>using namespace std;bool is_Prime(int n){ if(n <...
2020-12-15 11:33:52
72
原创 1153 Decode Registration Card of PAT (25分)
题意:测试者的id分为四个部分;我们给出三种类型:第一种:按照分数从大到小排,当分数相同,按照id从小到大排;第二种:求出符合类型二的id数量和分数总和;第三种:求出符合类型三的id,和数量,按照数量从大到小排,数量相同,按照id从小到大排;这里排序,最好用unorder_map,输出用printf,否则会超时;#include <iostream>#include <string>#include <algorithm>#include <v...
2020-12-15 10:44:15
185
原创 liunx下qt的完整安装
sudo apt-get install build-essential安装必须软件1、网址http://download.qt.io/official_releases/qt/5.12/2、这里运行结束会跳出安装界面,点下一步,要有QT账号,注册一个去官网上;点击注册,然后继续安装。安装结束。打开环境变量,进行环境变量配置;配置结束;更新环境变量;或者重启也可以;验证环境配置是否正确;...
2020-12-14 12:43:38
93
原创 1147 Heaps (30分)
首先建立完全二叉树,再后序遍历,并判断父节点和子节点的大小关系;#include <vector>#include <iostream>using namespace std;vector<int> list,listp;int M, N;bool flag[2];struct Tree { Tree *left, *right; int Val; Tree(int val) : Val(val), left(NULL), rig..
2020-12-11 21:49:12
69
原创 1155 Heap Paths (30分)
题意:给出一个完全二叉树,打印从根节点到叶节点的路径,打印的顺序需要先右后左;这里节点的值存储在数组中,其实序列从1开始。并且判断是大顶堆,小顶堆,不是堆,首先构建树,再遍历树;#include <vector>#include <iostream>using namespace std;int num,a[1001];vector<int> path;bool flag[2];struct Tree{ Tree *left,*right;...
2020-12-11 19:45:10
65
原创 1010 Radix (25分)
题意:本题目给出两个整数,一个N1,N2,他们的大小范围在0~z之间,如果tag为1则N1的进制为radix,反之。求另一个数与它相等的最小进制。这里有两点,第一点,可能整数非常大,用longlong,但是如果一出则为付的。第二点:要找出另一个数进制的最小和最大值,用二分法,否则时间会超限。最小的为整数中为最大的加一,最大的为另一个整数加1;第三点:用二分法,只用判断左边和右边的关系,不用比较中间和两边的关系;#include <iostream>#include <cmat..
2020-12-11 10:33:51
57
原创 1013 Battle Over Cities (25分)
题意;给出N个城市,在给出M个两个城市之间的路径,再给出我们需要关注的城市,如果每一个城市被占领,则去这个城市和出这个城市的路都被摧毁,问如何快速修复几条路进行剩余城市的路径进行同;这题:使用图找连通快,下表要是从1到N,注意这两点;#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int>route[1001];int N,M..
2020-12-10 11:25:41
55
原创 1012 The Best Rank (25分)
题意:给出每一个学生的id,和他的A,C,M,E四种成绩,之后给出M个id,如果上述的M个id没有出现过,则输出N/A;否则输出最好的成绩的排名。当然如果有好几个成绩排名是一样的,则输入优先级最大的排名A>C>M>E;这里需要注意,当每个人的排名一样则序号也是一样的,可以使用数组村相互每一个排名,并且按照优先级的顺序存放每一个成绩的排名,这样使用最小函数的时候,第一个找到即使最小的,也是优先级最高的;#include <iostream>#include <ve..
2020-12-10 10:44:58
60
原创 1011 World Cup Betting (20分)
题意:买三个游戏,每一个游戏有W,T,L三种可能,每种可能的概率不一样,求最大的利润;#include <iostream>#include <algorithm>#include <cstdio>using namespace std;char flag[3] = {'W','T','L'};double profit[3];int main(){ double game[3][3]; for(int i = 0; i < 3; ..
2020-12-08 20:04:07
61
1
原创 1009 Product of Polynomials (25分)
这题:就是两个多项式相乘,注意相乘的数组的大小是前面两个之和,使用hash表;在这里插入代码片#include <cstdio>double hash_A[1001],hash_B[1001],hash_C[2001],val;int max_A,max_B;int k1,k2,index;int main(){ scanf("%d",&k1); for(int i = 0; i < k1; i++){ scanf("%d %lf",&a..
2020-12-05 16:28:15
35
原创 1008 Elevator (20分)
在这里插入代码片#include <cstdio>int main(){ int N,res[100]; res[0] = 0; int time = 0; scanf("%d",&N); for(int i = 1; i <= N; i++) scanf("%d",&res[i]); for(int i = 1; i <= N; i++){ if(res[i] - res[i-1] >= 0.
2020-12-05 15:34:43
43
原创 1007 Maximum Subsequence Sum (25分)
题意:输出和最大的连续子序列;用动态规划做;如果所有的数都为负数,则和为0,再输出第一个数和最后一个数;在这里插入代码片`#include <cstdio>#include <algorithm>using namespace std;int main(){ int num,A[10001],dp[10001],k = 0; bool flag = false; scanf("%d",&num); for(int i = 0;..
2020-12-05 15:11:51
39
原创 1006 Sign In and Sign Out (25分)
这里:题意输出第一个进教室的,最后一个出教室的;把时间转换一下;在这里插入代码片#include<iostream>#include <string>#include <algorithm>using namespace std;struct Person{ string ID; string in; string out;};int to_time(string a){ int time = (a[0] - '0') ..
2020-12-05 14:34:11
83
原创 1005 Spell It Right (20分)
这里,一开始使用了size_t的类型,它是无符号的,因此当等于0的时候,会溢出。在这里插入代码片#include <cstdio>#include <vector>#include <cstring>using namespace std;int main(){ char s[11][100]= {"zero","one","two","three","four","five","six","seven","eight","nine"}; v.
2020-12-05 13:59:42
51
原创 1004 Counting Leaves (30分)
题意:构建树,判断每一层节点是否有叶节点,输出每一层叶节点的数目;第一列:第一个数是节点的总数N,第二个数是无叶子点数目M;相当于输入多少行;接下来输入M行,第一个是父节点,接下来是子节点数目K,后面是子节点数;第一点,需要注意定义全局变量,会自动初始化;第二点,深度的叠加需要加在广度优先中;第三点,vector声明大小后,可以直接用下标读入数据;第四点,最后输入空格,可以使用if判断,满足要求;在这里插入代码片#include <cstdio>#include <v.
2020-12-05 12:51:47
46
原创 1003 Emergency (25分)
第一问:第一种当到m的最短路径加上m到j的路径小于到j的路径时,那么到j的最短路径就更新为到m的最短路径。第二种情况:如果当m的最短路径加上m到j的路径等于到j的路径时,那么到j的最短路径就更新到m的最短路径加上之前到j的最短路径的数目。图中:1\2\3\是到m的当前最短路径,4、5是当前到j的最短路径;第二问:当m点加上到j的距离小于当前到j的最小距离时,那权重就自动更新为m点的权重加上m点到j的权重;当相等的时候,就要比较当前大j的权重4,5和1,2,3,加上m点到j的权重的大小,取最大的。..
2020-12-04 15:57:54
126
原创 PAT 1002 A+B for Polynomials (25分)
代码:#include <cstdio>using namespace std;int main(){ int k1,k2; double hash_1[1001] = {0}; double hash_2[1001] = {0}; int a1; double a2; scanf("%d",&k1); int max_1 = 0,max_2 = 0; for(int i = 0; i < k1; i++){.
2020-12-03 21:45:20
42
原创 Vmware-tools安装问题
今天突然vmware出现不能复制的问题,重新安装vmware-tools工具;1.出现vmware-toosl安装还是不能使用:sudo su(进入根目录)cd 地址(vmware-tools.pl地址下)./vmware-tools.pl一直enter,出现了错误open-vm-tools packages are available from the OS vendor and VMware recommends using open-vm-tools packages. See htt
2020-10-01 10:02:06
5413
5
原创 类型别名详细用法
(本文是参考c++primer第五版)类型别名解释:就是给一个复杂的类型取个通俗的名字(一方面为了让程序员知道该类型的用意,一方面编程的时候能够更快编写);用例:1)typedef double wages;(wages 是double的别名)2)typedef char *pstring(pstring是 char * 的类型)在声明语句中使用类型别名有其他的用意1)比如 const int *str;(str是一个指向整型常量的指针);typedef int p;(p是一个in
2020-09-26 20:07:47
442
原创 constexpr和常量表达式
Constexper变量在c++11新标准中,允许将变量声明为constexper类型以便编译器识别是否为常量表达式;1)常量表达式是值不会变在编译过程就能得到计算结果的表达式;2)变量int staff = 40;const int sz = staff;(这里staff是一个字面值常量。但它的类型是一个普通指向int并非const int ,所以不是常量表达式)const int size =20;Constexper int ex = size;(ex是常量表达式)备注:(声明为C.
2020-09-24 11:22:45
170
原创 c++基础
(此文章参考了c++ primer 第五版的知识点)声明和定义的关系1)变量可以被定义一次但是可以被多次声明。2)声明只是让名字被程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义负责创建与名字关联的实体。几种用法1)extern int j;(只声明不定义)2)extern int j = 23;(定义–任意包含显式初始化的声明都是定义)3) int j;(声明并定义;由于默认初始化了)4)多个文件都是用一个变量时,只有一个文件定义,其他文件只能声明不能重复
2020-09-24 10:08:24
54
原创 const详细用法
const的详细用法(本文的知识点来自于c++primer第五版)1 const的作用为了限定某个量,使这个量的值不能被改变(记住const是限定符不是变量)2 const的几种用法1 对变量b的限定a)const int b = 512;这里:b是一个常量,在定义的时候必须初始化和不可以修改,如下操作是错误的。const int b;没有初始化b =47;试图对常量a修改;b)对常量初始化的值得要求;const int b =512;int value = 1;const in
2020-09-23 16:46:14
281
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人