- 博客(46)
- 收藏
- 关注
原创 拓扑排序理解
前提:将拓扑排序首先要简单介绍一下AOV网。AOV网指的是顶点表示活动,有向边表示活动之间的次序(比如:a->b指的是a发生后b才可以发生)。可以将AOV网联想到一个建筑的施工图(A:买材料,B:打地基,C:盖楼)就可以有一个简单的图:A->B->C;先买材料再打地基然后盖楼。拓扑排序理解:首先拓扑排序的定义:对一个有向无环图进行拓扑排序,然后最终得到的序列满足如果U可以按照图到达V,则U肯定在V之前。对应的到的序列也叫拓扑排序列。回到上面的例子,该例子对应的拓扑排序列就是 A,B
2021-09-29 20:51:50
2266
原创 2021-09-12
第一章 搜索引擎概述搜索引擎的概念1.搜索引擎通常指的是收集了Internet上几千万到几十亿个网页并对网页中的每一个词(即关键词)进行索引,建立索引数据库的全文搜索引擎。当用户查找某个关键词的时候,所有在页面内容中包含了该关键词的网页都将作为搜索结果被搜出来。在经过复杂的算法进有在页面内容中包含了该关键词的网页都将作为搜索结果被搜出来。在经过复杂的算法进行排序后,这些结果将按照与搜索关键词的相关度高低,依次排列。.2.搜索引擎的历史最早的搜索引擎是Archie和Gopher,后来出现了机器人(Ro
2021-09-12 16:54:50
687
原创 Linux 多路IO复用和简单模型介绍(select,poll,epoll)
多路IO复用功能使用单进程来操作多个IO接口(主要是accept(等待客户端连接)和recv(等待客户端发送数据)的IO接口)注意: 面试千万不能回答成并发,他只是和利用多个进程来达到多个IO监听的效果相同,但是多路IO复用的基本模型就是利用单进程。为什么要引入多路IO复用和普通单进程的区别当我们写一个简单的单进程 c/s demo的时候我们会先用accept阻塞接受一个客户端发来的客户端请求clientfd,然后接收clientfd发来的数据进行处理并反馈。但是这是一个客户端的情况下可以满足。
2021-07-31 11:24:19
219
原创 c++内存管理-侯捷网课知识总结
c++应用程序内存分配的四个层面:侯捷老师总结:正如图中所示:对于封装好的c++应用程序,内存分配通常包括四层:c++标准库里面的std::allocator,c++原始代码原语:new, new[], new(), ::operator new(), delete…c语言中的malloc 和freeOS API正如图中所示,这四层是逐渐靠近底层。封装性逐渐降低。四层代码的实现:void *p1 = malloc(512);free(p1); complex<int>
2021-07-29 13:03:22
342
原创 stl源码分析知识点总结
1。泛化编程GP是将数据和数据处理函数分离(好处就是 二者可以闭门造车互不关联(只要有接口就行))。而面向对象OOP是将数据和数据处理函数结合在一起。2.链表之所以不能用::sort是因为::sort的需要 RandomAccessIterator,而链表本身提供的迭代器不能满足RandomAccessIterator所需要的必要条件3.模板分为三大类 :1、类模板 2、函数模板 3、成员模板其中 类模板在调用的时候需要用"<>"先指定类型,比如:map<int,int>
2020-11-12 16:00:50
325
1
原创 STL底层为什么要用仿函数(函数对象)而不是函数指针
侯捷老师总结:STL所提供的各种算法,往往有两个版本,其中一个版本表现出最常用(或最直观的)的某种运算,第二个版本则表现出最泛化的演算流程,允许用户"以template参数来指定所要采行的策略",拿accumulate来说,他的一般行为是将指定范围内的所有元素相加,第二版本则允许你指定某种“操作”,取代第一版本中的“相加”行为。要将某种“操作”当做算法的参数,唯一办法就是先将该“操作”(可能拥有数条以上的指令)设计为一个函数,在将函数当做算法的一个参数;或是将该“操作”设计为一个所谓的仿函数(就语言层面而
2020-11-08 12:02:01
864
2
原创 LeetCode-127单词接龙(vector建图+BFS)
原题:给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:输入:beginWord = “hit”,endWord
2020-11-05 18:58:44
149
原创 Linux- C语言服务器简单模型(epoll+线程池)
使用epoll的缘由:当多个任务到来时需要对其进行及时响应,并将任务下发给特定的处理线程,完成对应的任务。如果只用单线程进行listen轮询监听的话,那效率上实在是太低。而我们借助epoll的话就会很完美的解决这个问题(epoll详细太过复杂,而且这里主要目的是使用epoll,所以就不再赘述)。使用线程池的缘由:当实现高并发服务器时,当然需要实现多线程并发工作来处理多个客户端的连接。那么方法有如下两种每当客户端发送一个请求,服务器创建一个线程来处理客户端的连接请求。先预先创建若干个线程,并让.
2020-10-29 16:51:10
1962
原创 leetcode-回文字符串(马拉车算法模板)
马拉车算法由于看了一个巨巨的博客深受启发。所以不再赘述。巨巨的博客leetcode-最长回文字符串:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring著
2020-10-22 19:23:09
158
1
原创 leetcode-八皇后问题-递归解法(打印地图)
八皇后问题起源八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种计算机语言可以解决此问题。leetcode 问题描述:设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其
2020-10-18 14:17:56
392
3
原创 数据结构总结二-四种查找
二分查找首先二分查找是基于有序数组的查找,通过每次缩小区间来确定值的范围。但是也是很基础的算法不再赘述。#include<stdio.h>int BinaryChop(int arr[],int nLength,int nNum){ if(arr == NULL || nLength <= 0)return -1; int nBegin; int nEnd; int nMid; nBegin = 0; nEnd = nLength-1; while(nBegin
2020-08-07 10:57:22
304
原创 数据结构总结一
数据结构中基本结构的总结:包括:链表,栈, 队列,BST(二叉搜索树)以及RBT源码(和一篇博文介绍)链表的实现:首先链表就是最基本的数据结构了,由于太过基础就不再多说。#include<stdio.h>#include<stdlib.h>typedef struct list{ int nValue; struct list *pNext;}List;List *CreateList()//链表创建{ List *pHead = NULL; List
2020-08-06 10:45:36
144
原创 十种基本排序(总结)
排序算法总结:冒泡排序: 最经典的排序算法,因为算法太过基础就不再介绍; 附一个冒泡排序的优化算法:#include<stdio.h>#include<stdlib.h>void bubble(int arr[],int len)//第一种{ if(arr==NULL||len==0) { printf("bublle error\n"); exit(1); } int pos=len-1;for(int i=0;i<len-1;i++){
2020-07-27 10:15:59
470
1
原创 Linux-信号(信号初步以及捕捉-超详解)-day04
1.信号的概念:信号的特点:1简单。2 不能携带大量数据。3满足某种特殊条件才发送。信号的特质:信号是通过软件方法实现的,其实现手段导致信号有很强的延时性,但对于用户来说,这个延时很短并不会被察觉。注:每个进程的所有信号,都是由内核发送内核处理。能够产生信号的事件:1.按键产生。比如我们经常使用的 ctrl+c都是产生一个信号2.系统调用产生。比如 kill (函数)3.软件条件产生。比如定时器 alarm4.硬件产生的异常。比如非法访问内存(段错误)5.命令产生 ,比如:kill命令
2020-05-12 22:56:08
363
原创 Linux-进程间通信(mmap,pipe,fifo)-day03
管道:管道是一种最基本的ipc机制(IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程,也就是进程间的通信),作用于有关系的进程之间。通过调用pipe函数即可创建。并且有以下几个特点1.为一个伪文件(不占用系统内存)2.由两个文件描述符来操作,一个表示读取数据,一个表示写入数据3.数据从管道的写段流入,从...
2020-05-07 15:02:58
312
原创 Linux -回收子进程-day02
进程间通信mmap扩展execl函数族术语:在很多实际应用的场合,我们利用子进程是为了执行一些其他代码或者命令(比如让子进程去执行另一个程序)。所以我们就需要一些函数来帮助我们完成跳出父进程的代码,这也是exec函数族的意义所在。(注意调用exec函数进程ID不会改变,但是会将原子进程的所有内容全部删除,并从新程序的主函数开始执行)有六种(man查询有八种此处不再赘述)以exec开头...
2020-04-19 15:03:46
294
原创 Linux系统编程 进程-day01
进程纠结了一会不知道该怎么写,这里我就一些重要的点进行叙述,如有错误,还请各位不吝赐教程序和进程的区别程序 只占用磁盘空间,进程占用系统资源也就是说程序是一个静态的概念,进程是一个动态的概念。并发并发,在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕的状态,但在任意一个时间点上只有一个进程在运行。而如何达到宏观上多个线程同时执行的效果呢,就是利用信号 时钟等处理方式让CP...
2020-04-18 13:56:40
136
原创 C++重载操作符以及宏定义补充
c++重载操作符需求分析:由于类似+ -这类的操作符只能满足特定的需求,在实际中无法做到灵活变通。如:A类+B类就无法实现,所以c++大牛们就满足了人们c++重写操作符这一需求方法:重写操作符仅有两种方法一:在类中重写操作符,就比如我上述举的例子A类加B类就可以在A的原定义上重写+号操作符。(是不是感觉方法一就可以满足所有需求了,而且可以达到封装效果其实不然)二:定义全局函数...
2020-02-29 10:53:40
496
原创 多态-vfptr指针剖析 c++
多态问题解决多态是c++中的重要一部分,他在接口编程,协议制定方面都大有用处。但是 用小白的话说 其实无非就是 利用父类指针变量来调用子类成员函数。实现一个函数有多种形态。ok让我们首先利用仅有的知识解决父类指针调用子类函数函数调用有两种方法,一是指针->函数名二是函数指针取函数地址进行调用函数指针复习:首先 定义函数指针有两种方法,直接定义函数指针变量如:void...
2020-02-25 19:52:32
396
原创 c++学习之this指针,初始化列表,const,static
问题一:this指针:,即类中指向自己本身的指针,可以用来表明类中的成员变量与成员函数中的参数的区别。//代码一class person{public: int age;public:void setage(int age){this->age=age;//最浅显用法}}在实际接触时this指针对于我这种小白来说接触不是太大,但是对于大牛们无疑是把利器。而我们能够了解...
2020-02-21 22:22:02
598
原创 lambda c++与function函数
问题一:lambda函数lambda函数(匿名函数):C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象。作用:可以在本作用域内自动调用所有变量 完成对应的函数要求(而且可以有返回值),可以理解为一种新的传参方式,但是经过测试无法跨作用域。也许对于大牛们是很方便的使用(小白的理解,还望大佬们改正)。格式...
2020-02-19 22:32:39
976
原创 linux初入的问题
linux小白-day1好久没写过博客啦,啊哈哈哈。也挺爽的,为了学习开始啦。问题一:linux安装tree时显示 无法获得锁即作为小白的我一头雾水,为什么呢??什么鬼的锁。经过度娘的帮助,终于知道了为什么,就是我之前可能安装是错误退出了(虽然我也不知道啥时候退出过ORZ).废话不多说,见解决命令:rm /var/lib/dpkg/lockrm /var/lib/dpkg/loc...
2020-02-19 15:36:36
103
原创 VS报错RC1015(免费,简单,好使)
vs致命报错RC1015,无法打开包含“afxres.h”文件之前一直在用codeblock,但最近改做项目,发现codeblock就开始有点力不从心了,于是下载了一个VS2017,做了一个贪吃蛇的小项目,但是运行的时候,发现报了恶心的**“RC1015”**,根据报错信息发现自己 C:\Program Files (x86)\Microsoft Visual Studio\2017\Commu...
2019-11-15 20:27:50
942
4
原创 数据结构-链表c语言实现(详细功能)
链表:博主为考试方便留的模板,在此就不详细介绍啦(如果有错误,希望不吝赐教)不嫌弃的话也可以留做模板(哈哈哈)链表代码:#include<cstdio>#include<iostream>#include<malloc.h>using namespace std;typedef int ElemType;typedef struct node...
2019-10-24 22:00:45
210
原创 数据结构-栈,c语言实现(全部封装函数)
数据结构-栈博主写这篇文章是为了考试打印用,所以具体原理就不详细介绍啦不过代码也很简单。(如果不懂或者错误可以在下面评论) 废话不多说栈代码:#include<stdlib.h>#include<stdio.h>#define True 1#define False 0#define OK 1#define Error 0#define Infeasib...
2019-10-24 21:51:42
449
原创 1024第一个程序员节
刷勋章如今已经大二啦,还不知道自己现在能干什么~~~,很烦。今天还有作业就不再多说啦,以后就用这篇文章来记录自己的程序员人生吧。各位节日快乐o(∩_∩)o。...
2019-10-24 20:16:54
447
原创 数据结构单向队列c实现(全部函数功能)
单向队列额~~~,相信各位都是巨巨这点内容就不用我介绍啦。今天十月二十四,程序员节快乐。(其实写这篇文章也就是为了刷一个徽章而已,Orz,太卑微啦)队列代码实现:#include<stdlib.h>#include<iostream>#include<stdio.h>#define True 1#define False 0#define O...
2019-10-24 20:11:28
245
1
原创 通讯录小项目(c++实现)
通讯录项目额,其实核心就是实现一下对 .txt 文件内容的修改,只不过主题就是以通讯录功能的形式展现出来。这里的具体功能实现就是就是,增加联系人,删除联系人,查找单独的联系人,展示全部的联系人。如果读者感兴趣的话可以再往里面增加函数(博主写这篇的主要目的是为了增加大家的学习兴趣,熟练一下对应的函数,如有错误请多多指教Orz)。源代码:这里有一些查找的选项还没有往里面加,以后博主会会慢慢往里...
2019-10-21 19:28:34
411
6
原创 循环链表解决约瑟夫环(数据结构)
约瑟夫环据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-...
2019-10-18 20:54:42
785
原创 二维费用的背包-(01背包变形)
二维费用的背包:所谓二维费用就是除了01背包之前只限制的物品个数,再加一个限制条件,比如重量之类的。(具体看例题)如果零一背包还不太了解建议看一下这个—>>背包合集例题有 NN 件物品和一个容量是 VV 的背包,背包能承受的最大重量是 MM。每件物品只能用一次。体积是 vivi,重量是 mimi,价值是 wiwi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量...
2019-10-15 21:24:25
228
原创 混合背包(模板)
混合背包额,鉴于写的文章太少,本来这一篇可以加在一起原来的背包汇总中,但是,那样太长啦,就分开写一下(顺便加一点原创量,我太卑微啦)。想看一下其他的背包板子戳一戳-》-》背包汇总ok,进入正题:所谓混合背包就是,题目中的物品既有限定数目的物品,也有可以无限次使用的物品,背包的体积还是定值,这就需要我们,分开讨论一下。首先:我们知道01背包与多重背包的区别就是,多重背包需要套用一下二进...
2019-10-15 20:29:56
223
原创 三种背包及其常见变形模板(优化后)DP
动态规划本文无详细介绍,只有一些参考的模板,还不知道基本概念的同学,先当板子保存即可(如果不嫌弃的话)。OK,进入正题:01背包:01背包指的是物品的数目唯一,背包的容量唯一。求出背包能装下的最大价值。(代码中粗略介绍啦与未优化的代码的区别,有bug的话,请不吝赐教)代码模板:#include<bits/stdc++.h>#define ll long longusi...
2019-10-11 20:54:17
248
原创 (DP)给出一个集合,和n个数,判断是否存在子集使子集之和等于该数
动态规划题目:给一个数 n,m,以及接下来n个数字构成一个集合,然后接着给出m个数字判断是否存在子集使子集之和为这个数,如果存在,输出yes,否则输出no。(这里是博主学习dp的时候听讲解学到的一道题,具体在哪个oj上就不太清楚,若有大佬知道,请不吝赐教,在评论区发一下链接,在此谢过)题目分析:这一道题 其实很容易首先想到进行递归求解,再进行类似于剪枝的操作进行优化,可以用优于2n复杂度...
2019-10-06 16:18:27
1302
原创 acwing-245(线段树)
你能回答这些问题吗原题链接:原题题目:给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“1 x y”,查询区间 [x,y] 中的最大连续子段和,即 maxx≤l≤r≤ymaxx≤l≤r≤y{∑ri=lA[i]∑i=lrA[i]}。2、“2 x y”,把 A[x] 改成 y。对于每个查询指令,输出一个整数表示答案。输入格式第一行两个整数N,M。第二行N个整数A[...
2019-09-24 21:23:20
214
原创 额~~~字符表情大全(写博客需要)
字符表情写这篇的原因:由于博主很多时候不知道怎么表达内心感受,每一次都需要在网上搜一下字符表情,所以还不如写一篇博客,方便查找。= =|||→汗的意思 =,=||| → 无奈的样子 =,= → 从鼻子里“哼”出来的那种感觉 =3= → 噘嘴、亲亲、哼唧=a=→嘟嘴=o= → 哦;哇噢=v= → 嗯=u= → 憨厚的笑=皿= → 愤怒的样子=A=→吃惊=w= → 嘿嘿嘿→ → 斜眼…有鄙...
2019-09-07 10:27:46
3067
原创 Jumping Buildings-单调队列
原题链接:Jumping Buildings原题:D. Jumping Buildingstime limit per test2.0 smemory limit per test64 MBinputstandard inputoutputstandard outputBob is developing a new game called jumping Lario. In thi...
2019-09-07 10:18:02
461
原创 P3868 [TJOI2009]猜数字(中国剩余定理板子)
算法:中国剩余定理(板子)+快速乘原题链接:戳一戳-》猜数字原题:题目描述现有两组数字,每组k个,第一组中的数字分别为:a1,a2,…,ak表示,第二组中的数字分别用b1,b2,…,bk表示。其中第二组中的数字是两两互素的。求最小的非负整数n,满足对于任意的i,n - ai能被bi整除。输入格式输入数据的第一行是一个整数k,(1 ≤ k ≤ 10)。接下来有两行,第一行是:a1,a2...
2019-08-30 20:31:26
225
原创 代码黑科技
快读:#include<bits/stdc++.h>using namespace std;#define ll long longll read(){ ll f=1,x=0; char ss=getchar(); while(ss<'0'||ss>'9'){if(ss=='-')f=-1;ss=getchar();} while(...
2019-08-30 18:04:17
2484
原创 快速乘(简单易懂版-板子)
快速乘快速乘先知(原理):由于计算机设计的时候,加法本身就比乘法更快,所以在计算大数乘法的时候,如果直接乘就会比较慢(TLE,Orz),所以可以考虑考虑用加法代替乘法(或者可以说用较少的乘法,用更多的加法来取代),没错就是乘法分配律。设计算法原因:除了上述的乘法本身就比较慢以外,还有就是大家刷题的时候经常遇到,两个很大的数相乘再取模问题,然而总会有一些用(sang)心(xin)良(bing...
2019-08-30 17:12:00
1884
原创 费马小定理(易懂)
费马小定理:内容:若存在整数 a , p 且gcd(a,p)=1,即二者互为质数,则有a^(p-1)≡ 1(mod p)。(这里的 ≡ 指的是恒等于,a^(p-1)≡ 1(mod p)是指a的p-1次幂取模与1取模恒等)(不理解的话请留言)证明:这里证明较为复杂需要先引出两个定理:引理一:若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当a·c≡b·c(mod m)时,有...
2019-08-22 16:22:20
18307
16
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人