- 博客(34)
- 资源 (7)
- 收藏
- 关注
原创 算法第四版_1.5_并查集
并查集本书详细阐述了并查集的提出与优化; 从提出到找到最优解, 并查集共经历了四个版本: quick-find, quick-union, 加权quick-union和使用路径压缩的加权quick-union;1. 并查集概念等等并查集的目的: 就像他的名字一样, 并(union)和查(find), 是要实现将两个集合快速并在一起, 以及快速从集合中查找到某两个元素是否相连的一种数据结构, 算法第四版中给出了一幅很具象的图, 即下图, 我们可以较为清
2022-02-08 09:41:58
210
原创 CSAPP_Chapter1
CSAPP第一章本章的目的本书的目的是让我们程序员能够写出更好的程序,而为了能够写出更好的程序,我们程序员需要做到以下几点:了解C语言的存储方式以及C语言的生命周期编写好的C程序是以文本格式放在硬盘里的,而了解C语言生命周期,就是去了解为C程序准备的编译系统,原因有三点:为了优化程序性能;去了解C语言从被创建,到被编译为可执行文件的过程,这需要深入C语言的汇编层面实现等等,这些可以帮助我们选择更好的方式进行功能的实现,以及了解C语言的各种抽象表示是如何实现的,比如指针、数组;处理链接方面的错误
2022-02-08 09:38:02
710
原创 大厂刷题第十六课
约瑟夫环问题许多人站成一圈,给每个人从1开始编号(也可以从0开始,不重要),第一个人从1开始报数,淘汰报了数字m的人,从淘汰的人的下一个人从1开始报数,重复淘汰,返回最后剩下的那个人的编号;第一种方法,用递归,一步杀一人,千里不留行,O(M * N);第二种方法,对于环形链表a—>b—>c—>d,设m = 2,一开始的他们的编号为1—>2—>3—>4,报数之后淘汰b,变成了a—>c—>d,从c开始报数,所以他们的编号为3—>1—>2,然后往
2021-12-28 20:48:42
246
原创 汇编与C语言一
一、汇编语言产生的原因机器只能识别01序列串,以前程序员在写代码时,写的都是0101011101010这些鬼东西,不方便人类理解,美国人希望用英语单词来代替01序列串,为此他们创建了一张表,将可能用到的所有英文符号全部与01序列串对应,也就是说让人类写代码时写的是英文单词,编译的时候,用一个机器把英文单词编译成01序列串,机器就可以拿着01序列串开心地运行了,这个实现英文单词转成01序列串的机器就是汇编器,他们创建的那张表就是ASCII表;由于需要表示的英文符号(包括abc之类的英文单词在内)大约有12
2021-12-20 23:27:58
1066
原创 通信原理09_信道编码
连、线性分组码一、线性组合一个矢量空间被许多数相乘后相加;二、线性相关性如果存在一组不全为0的线性组合的系数,使得线性组合为0,则称该线性组合线性相关;反之不相关;三、线性分组码1.基础知识对于k位的信息序列,通过线性加减的方式进行编码而成的码称为线性分组码;线性分组码由于通过信息序列加减方式进行编码,故可以将加减的法则抽离出来形成矩阵,称为生成矩阵,如果编码后长度为n,则编码的矩阵的规模为(1,n),信息序列矩阵规模为(1,k),生成矩阵规模为(k,n);分组码的后n - k位可以看做是
2021-12-01 10:36:16
1156
原创 Nginx源码分析_01_内存管理
排、内存池概述内存池代码见src/core/ngx_palloc.c,内存池的结构体见src/core/ngx_palloc.h;Nginx接受到请求之后,会创建内存池或在已有内存池中进行内存的开辟,把内存分配给请求;内存可分为大块内存和小块内存,大块内存可以被手动释放,小块内存不需要,在内存池销毁时,大块和小块内存会被依次释放;内存池中开辟的内存全部都是小块内存,而大块内存指的是由其中一个指针指向的结点里的一个指针指向的内存 (doge)连、主要涉及的结构体一、ngx_pool_s(常用内部的
2021-11-20 21:44:00
864
原创 移动通信_第六章_LTE
一、LTE系统架构演进3GIMS架构3GIMS架构的核心网由CS域(电路域)和PS域(分组域)组成,引入了IMS多媒体子系统,让语音业务不仅可通过传统的CS域提供,还可以由IMS提供IP电话VOIP;EPS架构EPS架构舍弃了电路CS域,将其纳入PS域,也就是说打电话必须通过IMS多媒体子系统,如果没有IMS,则通过回落到2G进行通话;LTE网络结构看到LTE舍弃了 RNC,降低了网元的数量,降低了接入时延用户接入时延2s→100ms业务端到端时延100ms→20ms网络结构扁
2021-11-14 21:26:48
542
原创 电信传输_第六章_光纤接入网
接入网的主要特点1.完成复用、交叉连接和传输功能提供各种综合业务2.网径较小3.成本与用户有关线路施工难度较大光纤化程度高4.对环境的适应能力强组网能力强PON的三大优势:1、更远的传输距离,采用光纤传输,覆盖半径20KM;2、更高的带宽,达1.25G;3、分光特性,,节省光纤资源;光纤接入网的基本网元设备OAN的基本网元设备有光线路终端设备OLT、光配线网ODN和光网络单元ONU;分类1.OAN根据光配线网(ODT / ODN)是否有源而分为AON和PON;PON和AON都具有光
2021-11-09 23:51:39
1828
原创 移动通信-WCDMA物理信道
排、物理信道概述WCDMA的物理信道,功利一点说,一种分类为公用信道、专用信道,一种分类为上行和下行;此处用移动端开机时的流程对信道进行总结:1.信道的初始化该步骤用到了P-CPICH、P-CCPCH和SCH;首先,通过搜索P-SCH获得时隙同步,(512个扰码分为64组)再通过S-SCH知道该手机的扰码组是64个组中的哪一个;再通过P-CPICH获得扰码;再通过P-CCPCH进行广播信道的监听,获取广播消息;2.寻呼信道该步骤用到了S-CCPCH和PICH手机接收PICH发送的消息,得知在
2021-11-07 19:38:04
1714
原创 日记2021.11.6
星期六排、对于快速排序的思考通过洛谷刷题我找到了一套快排模板,它比左神的那套更简洁,不需要将顺序打乱,它从中间开始向左右两边递归,但有一点,我调试了半天才看出来;对于中间值,是在一开始赋值的时候就把中间值mid固定下来,而并不是表示中间值的下标 int mid = arr[(L + R) / 2];举个例子,如果说在某个qSort中,中间值比范围里所有的值都小,那首先,i不会动,j会径直往前等于中间值然后,中间值会被扔到最前面,i来到中间值的下一个,而接下来的比较也会是和扔到
2021-11-06 22:56:40
86
原创 洛谷【算法1-1】模拟与高精度题单
第三题:玩具谜题题目:一圈玩具小人有的朝内有的朝外,给定许多指令【往我的哪个方向(左或者右) 走多少位】,因为小人朝向不同,所以有4种情况分析:(1)判断时有四种情况:人朝里向左,人朝里向右,人朝外向左,人朝外向右,而对于一个圈而言,如果不好分析,可以将其平铺成线,也就是变成数组形式,再向左和右各延拓一个周期;(2)人朝里向左和人朝外向右是一样的,在数组上都是往左移动,反之就是向右移动;如果向左移动,可能会到负数,也就是(curSit - count) < 0, 这时可以加上一个小人总数(
2021-11-06 00:29:41
323
原创 算法体系结构第十一课
一、序列化把一棵树按照某种遍历进行文本格式保存,注意保存时要保存空;比如一棵树的结构是: __1 / 2__ \ 3先序遍历序列化的结果是:1, 2, #, 3, #, #, #,
2021-11-06 00:19:59
91
原创 算法体系结构第十课
一、返回可能成环的两条单链表如果相交的第一个结点分为三种情况讨论:1.都无环全都遍历到最后,如果俩结点是一样的,必相交,长链表先走两链表长度差值步,再一起走到相等的结点即可2.一个有环一个无环必不可能相交,所以直接返回空;3.都有环要么有环不相交,要么相交后成环,要么双马尾;返回入环结点:快慢指针法,快指针指到空时无环,返回空,快慢指针相遇后,从该位置和头结点开始一步一步走,相遇时即是入环结点;coding:1.主函数:获取两个链表的入环结点,都为空即都无环,都不为空即都有环,进入相
2021-11-06 00:19:48
77
原创 算法体系结构第六课
一、堆结构采用一个数组进行堆结构的存储heapSize以内的数便是堆结构每个子节点的父节点下标: (i - 1) / 2父节点的左孩子和右孩子的下标: 2 * i + 1 2 * i + 2二、heapInsert:(加进来的数进行调堆)加到末尾的数不断与自己的父节点进行比较,直到到达根节点或者比自己的父节点的值小,就停下;while (arr[index] > arr[(index - 1) / 2]) { swap(arr, index, (ind
2021-11-05 22:24:56
87
原创 算法体系结构第九课
一、寻找链表的中点(1)需要链表长度在3及其以上(2)一个快指针一个慢指针1.中点或上中点Node slow = head.next;Node fast = head.next.next;2.中点或下中点Node slow = head.next;Node fast = head.next;3.中点或上中点前一个结点Node slow = head;Node fast = head.next.next;4.中点或下中点前一个结点Node slow = head;Node f
2021-11-05 22:24:49
82
原创 算法体系结构第八课
一、前缀树1.插入(指示牌)(1)root---插进地下的树根里(2)pass---有很多游客走过(3)path---有一条小路(4)null---new---工人施工---没有、建出来(5)node = node.nexts[path] ---人很多,接踵而至---下一个走上一个踩的石头(6)pass---end---一直走到尽头2.删除(放伞处)(1)search---看看哪把伞(2)root---底座钉在地上(3)pass-- ---拿伞走人(4)path---伞上有蜘蛛(
2021-11-05 22:24:25
75
原创 算法体系结构第四课
一、归并排序1.递归法递归函数:(basecase:当L = R时,return)取得数组的中间元素下标mid,对它左边也就是[L…mid]调用递归进行排序,对它右边也就是[mid…R]调用递归进行排序,对这两边进行merge;merge函数:传入参数有 L、R、mid、arr准备一个帮助数组help[ ],与它对应的下标值 i,两个指针p1和p2,当两个指针都未越界的时候,help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++]
2021-11-05 22:24:14
119
原创 算法体系结构第七课
一、最大线段重合问题给定许多线段,返回重合线段区域最多的线段数(规定每条线段都是从整数开始)挫办法:计算每个 .5被多少给定的线段包含,返回最大的 .5的线段数实现:
2021-11-05 22:24:06
89
原创 算法体系结构第十二课
一、完全二叉树的判断1.流程:(1) 按层遍历,如果一个结点左孩子为空右孩子不为空,返回false;(2)当遇到第一个不满的结点时,后面的结点需要全是叶子结点;2.code:代表是否不满的boolean类型的变量leaf设为false;满足上述条件任意一个的,都返回false,而第二个条件:(是的,不满) && 不是叶子结点,所以&&后面的 leaf像一个开关,打开了就不关闭 在遍历到第一个不满的结点时,其实还是认为它是满的(leaf == false),所
2021-11-05 22:23:55
117
原创 算法体系结构第十三课
一、完全二叉树的判断1.第三种判断方法:用结点从左右是满的开始,填满下一层(1)如果是满的,则左右高度相等或者左比右高1,(2)如果左完全,右满,则左比右高1,(3)如果左满右满,参考(1)(4)如果左满右完全,左右高度相等(5)如果左满右满,参考(1)二、返回最大BST的头部1.树型dp和返回最大BST的尺寸类似,不过BST的判别条件改成了最大头部为本树的头2.挫办法(1)通过中序遍历获取当前结点的最大BST,如果非0,则返回该节点;(2)如果为0,则用左右孩子调用当前函数,谁大返
2021-11-05 22:23:43
116
原创 算法体系结构第十四课
一、怎样让一天内开会场次最多1.贪心按照会议结束的时间进行排序,如果有开始时间比此次会议的结束时间晚的,就办它,再让时间线等于它的结束时间;2.暴力每次拿出一个会议当做要安排的第一个会议,通过递归看看这样安排后还能安排多少会议;递归函数:每次将遍历到的数组元素删掉的新数组进行递归二、分金问题描述:拆分金条,每次拆分时都要花费与金条长度对应的铜板,问怎么花费最少的铜板切成给定长度的金块1.贪心把给定的数组放入小根堆中,弹出两个,加起来,记一下代价,放入堆中,直到堆只剩一个;2.暴力取任意
2021-11-05 22:23:23
64
原创 算法体系结构第十五课
一、朋友圈问题给定一个正方形二维数组,认识的人一定互相认识,自己一定认识自己,问有多少个朋友圈1.解法:并查集基础应用,当这两个人交叉的点的值是1的时候,把他们联结一下,继续遍历下一个结点,而且为优化常数时间,只需要遍历矩阵的上半部分 for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { if (M[i][j] == 1) {
2021-11-05 22:23:07
73
原创 算法数据结构第五课
一、前缀和假设0 ~ i上整体累加和是x,求必须以i位置结尾的子数组,有多少个在 [lower , upper] 上,等同于求i之前的所有前缀和中,有多少落在 [x - upper , x - lower] 上,如果说一个前缀和在[x - upper , x - lower]上达标,那么必定有一个以i结尾的子数组在[lower, upper]上达标。...
2021-11-05 22:22:50
180
原创 洛谷第1题 P1042 乒乓球
洛谷AC的第一题!主要卡点(1)E之后的数据不能管,要break掉;(2)当输或赢的数量大于等于11时(注意是大于等于!不是等于!),还要判断输赢大于等于2,才能输出剩余的(也就是当前正在比赛的)数据;import java.util.ArrayList;import java.util.Scanner;注意主类要改成Main,我想学C++了...tm题解全是C++!淦!java的题解一个都找不到!public class Code01_PingPong { public stat
2021-10-31 21:17:06
157
原创 TankWar网络
一、netty基础1.netty初始化:创建两个负责接客的boss组和四个负责服务的工人组;创建一个Server启动辅助类;将接客组和工人组传入辅助类(注意接客组排最前面);规定工作方式为基于事件处理的异步全双工;childHandler:netty内部处理了accept的过程,客户端连上来之后,写一个callBack对客户端进行处理;接收进来的客户端都被认为是服务端的child;每接收一个端,都需要进行childHandler处理;(也就是观察者模式)当一个客户端连到服务器上面的时候,ne
2021-05-03 21:59:38
81
原创 堆、堆排序
一、完全二叉树一棵树要么是满的,要么在满的路上二、堆的概念与实现堆就是完全二叉树,也叫优先级队列堆可以由数组来实现,先定义一个比较大的数组长度,而真正有用的、代表了堆结构的数组的长度小于数组实际长度;三、大根堆与小根堆的概念当一棵完全二叉树,包括它本身和它的所有子树在内,的根节点大于等于所有叶子结点的值的时候,此完全二叉树被称为大根堆;小根堆类似;四、HeapInsert向一个堆里添加一个数,让它向上看,如果说大于父节点就让它交换,实现上浮/*传递过来的时候,index对应的数值已经在数
2021-04-17 23:05:50
112
原创 TankWar基础
一、创建一个画框让TankFrame类继承Frame类,设置标题位置大小,最后在main里面实例化,设置setVisible为true就可以了;二、创建一个黑方块重写paint方法,使用g,也就是awt自动初始化的一个变量,相当于一只画笔,调用fillReact,设置位置和长宽;三、创建Tank类为了体现封装性,需要将画笔封装入Tank类中;四、让黑框框动起来在main函数中,改变黑框框位置的同时,通过while死循环和repaint()不断地刷新画框,黑框框就动起来了;五、键盘输入使黑框
2021-04-14 23:29:20
221
原创 随机数、链表
一、随机数的产生Math.Random产生[0, 1)之间的任意小数Math.Random * (value + 1)产生[0, value + 1)之间的任意小数(int)Math.Random * (value + 1) 产生[0, value]之间的任意整数二、链表1.链表的反转(1)创建双向链表需要一个头指针next,一个尾指针last还要有一个值,通过构造方法传入Node public static class Node { Node last;
2021-04-01 12:18:00
234
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人