-
2024-09-03欧拉函数求质数欧拉函数求质数 #include<iostream> using namespace std; typedef long long ll; const int N = 1e6 + 10; int euler, primes, cnt; bool st; void get_eulers(int n){ euler = 1; for(int i = 2; i <
-
2024-08-28UI 优化官方解释 Statistics 窗口官方解释 UI合批规则:https://blog.csdn.net/sinat_25415095/article/details/112388638 Unity四种合批技术详解:https://blog.csdn.net/ww1351646544/article/details/139678759 一、UI组成 UI组成:UGUI中的每个组件都是由3D网格,材质
-
2024-08-28UGUI基础一、UGUI概述 UGUI(Unity GUI)是Unity引擎中的用户界面系统,用于创建游戏和应用程序中的用户界面,它基于画布(Canvas)系统,通过组件和GameObject来排列、定位和样式化UI元素。 Unity社区的UGUI学习链接:https://developer.unity.cn/projects/637c68a3edbc2a001ba22eee UGUI的主要特点包括: 基于组
-
2024-08-26最小生成树 (Prim算法和Kruskal算法)一、最小生成树什么? 1.1 定义 最小生成树: 一个有n个结点的连通图的生成树是原图的最小连通图,且包含原图的所有n个结点,并且保持图的连通的最少的边。 最小生成树可以用:Prim算法和kruskal算法求出 1.2 应用 铺设电缆: 以尽可能低的总价去铺设城市之间的电缆(假设每两个城市可以连通) 旅行家: 某人自驾游想花费最短的路程去旅行到自己所想去的城市(城市有n个 n > 2) 连接
-
2024-08-26图论-五种最短路算法一、最短路是什么? 最短路径: 从某个点A(位置)到另一个点B(位置)的最短距离,实现方法:点A途中可以经过很多个点C,然后通过不断更新点A到途中点 C 的最短距离,最后实现最短距离到达 点B。 A -> C1 -> C2 -> C3 -> B 最短路径的分类: 单源最短路:图中的一个点到其余各点的最短路径 多源最短路:图中每两个点的最短路径 框架图解:(如果看不清的话,放
-
2024-08-26邻接表和邻接矩阵、树的遍历一、邻接表与邻接矩阵 1.1 稠密图与稀疏图 图的储存方式分两种:邻接表和邻接矩阵。 了解邻接矩阵和邻接表之前我们要先学会稠密图、稀疏图。 百度百科来说:稠密图、稀疏图。 稀疏图:有很少条边或弧(边的条数|E|远小于|V|²)的图称为稀疏图(sparse graph)。 稠密图:有很多条边或弧 (边的条数|E|接近|V|²) 的图称为稠密图(dense graph)。 简单来说:我们假设某个图的点
-
2024-08-26BFS(广度优先算法)一、BFS是什么 先用百度百科的来讲: BFS(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和广度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 简单来说,BFS是一种图搜索的算法
-
2024-08-26DFS(深度优先算法)一、DFS是什么? DFS(深度优先搜索算法):一种用于遍历或者树或者图的算法,是一种递归程序,不断递归达到无法在到达的点,简单点来说:一条路一直走,走到没有路后就原路返回,重新选择另一条 dfs(step + 1)。 DFS = 暴搜 + 回溯算法 + 剪枝(大多数是这样)。DFS需要回溯算法,其他算法也需要回溯算法,两种是一种调用关系。 暴搜:一条路走到黑(直接递归走到底) 回溯:DFS 开启
-
2024-08-24KMP算法一、KMP是什么 KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在文本中查找模式。它的核心思想是利用已经匹配的信息来避免重复匹配,从而提高效率。 二、暴力字符串匹配 暴时间复杂度O(n * m) //大概是这样的,可能有差别,但是模板基本上是这样 for (int i = 0; i < m;) { int j = 0; while (i < m &a
-
2024-08-23Trie树(字典树)一、Trie树是什么? Trie树又称字典树或前缀树,是一种能够快速查找一组字符串含有一个字符串的类似哈希表的树结构,是以空间换时间,利用字符串的前缀来降低查询时间。 与二叉树不同,Trie树有26子节点对应26个字母,根节点不包含字符串,从根节点到某个节点,经过的字符连起来的字符串就是对应的字符串。当储存结束一个字符串后,尾节点会用cnt数组来说明该字符串的次数。 二、怎么建立Trie树
-
2024-08-23哈希表与哈希冲突(Hash表 散列表)一、哈希表是什么? 哈希表(Hash table 又叫散列表)是能够通过给定的关键字的值直接访问到具体对应的值的一个数据结构。通常,我们把这个关键字称为Key值,对应的值称为Value值。关键值和Value值是一种一一对应的关系(也就是映射关系),这个映射表,也叫做哈希函数,存放记录的数组就是哈希表。哈希表也类似于离散化。 哈希表的作用:哈希表的作用就是能够通过Key值快速获取Key对应的Valu
-
2024-08-23堆(手写堆包含STL)一、堆的定义: 堆是什么,堆就像是一个金字塔,最顶端的是最值(最大值和最小值),堆其实就是一个二叉树,将最值元素放到根节点。子节点要么都小于父节点,要么都大于父节点。但是写手堆的话,我们用的是数组来存储,所以堆通常也被看做一颗树的数组对象。 二、堆的分类及性质 2.1 堆的分类: 大根堆和小根堆,根节点最大的堆叫大根堆,根节点最小的堆叫小根堆。 2.2 STL的定义: 首先要调用堆的头文件: #i
-
2024-08-23高精度运算(加减乘除)一、高精度是什么? 高精度算法:是处理大数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加,减,乘,除,乘方,阶乘,开方等运算。对于非常庞大的数字无法在计算机中正常存储,于是,将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中, 用一个数组去表示一个数
-
2024-07-23JDK安装一、进入官网下载对应的安装文件 JDK官方链接 根据系统选择相应的exe文件进行安装,点击安装包,进行jdk傻瓜式流程安装。 二、配置JDK环境变量 安装完毕后,配置一下JDK的环境变量,打开系统环境变量。 配置JAVA_HOME:变量名:JAVA_HOME 变量值: C:\Program Files\Java\jdk-17 (安装路径) 配置Path:点击Path环境变量,新增变量值:%JAVA
-
2024-07-22状态者模式一、概念 状态模式是一种较为复杂的行为型设计模式,它用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统的某个对象存在多个状态时,这些状态可以互相转换,而且对象在不同的状态下行为也不相同。 很多时候状态切换表示会用if-else 或者switch 来表示状态,这会导致代码的可维护性和灵活度下降,当出现新的状态时,需要修改客户端代码,不符合开闭原则。状态模式将对象的状态分离,封装到专
-
2024-07-22事件系统一、 委托与事件 1.1 委托 delegate是一个关键字,用来声明委托类型,Delegate是一个类,是委托类型的基类,但只有系统和编辑器可以显示地从Delegate类或者MulticastDelegate类派生,通常我们使用delegate关键字来定义委托类型。 委托是一种引用类型(类似于函数指针),允许我们封装方法的引用,通过使用委托,我们可以将方法作为参数传递给其他方法,或者将方法类型组
-
2024-07-10观察者模式一、概念 观察者模式是使用频率较高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,当一个对象发生改变时将自动通知其他对象,其他对象将做出相应的反应。在观察者模式中发生改变的对象称为观察目标,而被通知的对象成为观察者,一个观察者目标可以对应多个观察者。 定义:定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时其相关依赖对象皆得到通知并自动更新。 二、模式结构 Subject(
-
2024-07-09职责链模式一、概念 在系统中如果存在多个对象可以处理同一请求,则可以通过职责链模式将这些处理请求的对象连成一条链,让请求沿着该链进行传递。如果链上的对象可以处理该请求则进行处理,否则将请求转发给下家进行处理。 定义:避免将一个请求的发送者与接收者耦合在一起。让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并沿着这条链传递请求,直到有一个对象能够处理它为止。 二、模式结构 Handler(抽象处理者
-
2024-07-08代理模式一、概念 当无法直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象要实现相同的接口。代理模式根据其目的不同,划分为保护代理、虚拟代理、缓存代理等。 代理模式引入一个代理对象,在客户对象和目标对象中之间起到一个中介的作用,去掉了客户不能看到的内容和服务或者添加客户需要的额外的新服务。 定义:给某一个对象提供一个代理或占位符
-
2024-07-06享元模式一、概念 当系统存在大量相同或者相似的对象时,可以使用享元模式。享元模式通过共享技术实现相同或者相似的细粒度对象的复用,从而节约了内存空间,提高了系统性能。在享元模式中提供了一个享元池用于存储已经创建好的享元对象,并通过享元工厂类将享元对象提供给客户端使用。 定义:运用共享技术有效地支持大量细粒度对象的复用。 享元模式与对象池模式的区别:对象池的概念是为了避免频繁地进行对象创建和释放导致内存碎片,
-
2024-07-02装饰模式与外观模式一、装饰模式 1.1 概念 装饰模式是一种用于替代继承的技术,它通过无须定义子类的方式来给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系。装饰模式降低了系统的耦合度,可以动态增加或删除对象的职责。 定义:动态地给一个对象增加一些额外的职责,就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。 1.2 模式结构 Component(抽象组件):具体组件和抽象装饰类的共同父
-
2024-06-30组合模式一、概念 在面向编程中,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承,继承是面向对象的四大特征之一,表示is-a的类关系,继承特性解决了代码复用的问题,但是当继承的深度过度,代码变得更复杂,变得更难以维护。而组成则表示has-a的关系,是把另外一个对象当作当前这个对象的一部分,是组成我的一部分,能够很好的实现代码的复用。 组合模式是一种结构性设计模式,它允许你将对象组合成树形结
-
2024-06-28适配器和桥接模式一、适配器模式 1.1 概述 适配器模式充当两个不兼容接口之间的桥梁,属于结构型模式,它通过中间件(适配器)将一个类的接口转换为客户期望的另一个接口。如生活中的充电器,生活用电的电压是220V但是手机的工作电压没那么高,于是就有了充电器(变压器)让手机能在220V电压下充电,在这电源充电器就充当了一个适配器的角色。 定义:将一个类的接口转换为客户希望的另一个接口,适配器让那些接口不兼容的类可以一起
-
2024-06-23浮点数的精度问题每个人在写关于浮点数判断大小的时候都会看到a - b < 1e8来确定a和b的数值是否相等,为什么不能适用a == b来直接判断呢? 这个就涉及到了浮点数的精度问题。 下面一段代码 #include<iostream> using namespace std; int main(){ float a = 0.1; float sum = 0; for (int i = 0; i
-
2024-06-19原型模式一、概述 原型模式是一种特殊的创建型模式(对象创建型模式),它通过复制一个已有对象来获取更多相同或者相似的对象。原型模式可以提高相同类型对象的创建效率,简化创建过程。其中原型模式又分为浅拷贝和深拷贝。浅拷贝是指复制引用但不复制引用的对象,而深拷贝复制的引用和引用对象。 定义:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。 二、模式结构 Prototype(抽象原型类):它声
-
2024-06-17Dictionary底层源码剖析Dictionary字典型数据结构是以关键字Key值和Value值进行一一映射,Key的类型并没有做任何限制,可以是整数,也可以是字符串,甚至是实例对象。Dictionary的实验原理,有两个关键算法,Hash算法和解决Hash冲突的拉链法,key值和value值的映射关系就是通过Hash函数来建立的。 Dictionary源码 一、实现原理 1.1 Hash函数 Dictionary会针对每个K
-
2024-05-29Unity的List底层源码剖析我们在Unity经常会使用List类型,但是却没有好好了解过List类型,它其实是使用了一个连续的内存块来存储元素,它的结构有点类似链表,但又与链表有着许多不同的地方.让我们来了解一下List的底层实现. C#的List源码: C#源码 一、构造函数 List是C#中一个常见的可伸缩的数组组件,通常用来代替数组,其底层的数据结构就是基于数组(非链表).由于它是可伸缩的,所有我们在编写程序的时候不需
-
2024-06-16建造者模式一、概念 建造者模式是一种创建型设计模式,它将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分和装配方式,只需知道建造者的类型即可。建造者模式关注如何一步一步地创建一个复杂的对象,不同的具体建造者者定义了不同的建造过程,而且具体的建造者相互独立。 定义:又称生成器将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现。 二、模式结构 产品(Pr
-
2024-06-05单例模式一、概述 单例模式是结构最简单的设计模式,其核心结构中只包含一个被称为单例类的特殊类。单例模式是一种创建型设计模式,它保证一个类只有一个实例,并且提供一个全局访问点。单例模式用来解决频繁创建与销毁实例对象问题,当我们控制实例创建个数或复用实例,就可以使用单例模式,这样有助于节省系统资源。 定义:确保一个类只有一个实例,并且提供一个全局访问点来访问这个唯一实例。 二、结构 单例模式有三个要点: 某个
-
2024-06-03三种工厂模式一、简单工厂模式 1.1 概述 简单工厂模式并不属于GoF的23种经典模式的一种,但通常将它作为学习其他工厂模式的基础,而且在实际中,它也是运用最广泛的一种设计模式。其主要实现步骤是将需要创建的各种不同对象的代码封装到不同的具体产品类中,这些具体产品类的公共属性与方法提取放在一个抽象产品中,具体产品类继承抽象产品类,然后再在工厂类中提供一个创建产品的工厂方法,该方法根据所传不同的参数来创建不同的具
-
2024-05-31常用的排序算法一、快速排序 快速排序是一种最坏情况为O(n^2)的算法,虽然这个情况比较差,但是它平均性能比较好,其排序期望运行时间为O(nlogn),另外由于快速排序不消耗额外的内存空间,因此在很多地方都用快速排序,如数组的排序等。快速排序可以说是最常见、最好用的排序算法。 排序算法步骤: 从序列中选择一个元素作为基准元素。 每次排序,都把所有比基准小的元素移动到基准元素的左边,把比基准元素大的移动到右边。
-
2024-04-11SSH一、ssh的简述 安全外壳协议(Secure Shell,简称SSH)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议. SSH是建立在应用层基础上的安全协议,SSH是较可靠,专业为远程登录会话和其他网络服务提供安全性的协议.利用SSH协议可以有效防止远程管理过程中的信息泄露问题. 二、ssh登录 2.1 基本 ssh远程登录服务器的指令为 ssh user@hostname user
-
2024-05-27设计模式一、设计模式概念 1.1 设计模式是什么 设计模式是软件设计中常见问题的典型解决方案,他们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题.设计模式就是问题反复出现,然后通过设计来解决问题,然后记录下来解决方式,进行总结就成为了设计模式. 设计模式:在某个场景下,针对某类问题的某种通用的解决方案. 场景:项目所在的环境 问题:约束条件,项目目标等 解决方案:通用、可复用的设计,
-
2024-05-14Unity基于Gradle的Android打包Unity打包apk一般有两种方式,一种是直接在Unity导出apk,还有一种是先导出gradle工程,再通过外部工具对gradle工程进行构建(如Android Studio). 一、什么是Gradle Gradle是一个项目自动化构建的开源工具,基于JVM,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置.DSL语法和Java相接近. 二、Unity导出Gradle工程 使用U
-
2024-05-13命令模式一、概述 最近接触公司一个模块,是公司的首战模块.它其中用的就是命令模式,通过读表创建一个命令队列,然后依次执行.之前没有了解过,一直不知道这个模块是什么内容,最近灵光一现,才发现原来是命令模式.所以写篇博客记录一下. 命令模式是一种常用的行为型设计模式,它将请求发送者与请求接收者解耦.请求发送者通过命令对象来间接引用接收者.使用系统具有更好灵活性,再可以不修改现有系统源代码的情况下让相同的发送者
-
2024-05-12心得2024-5-12 心情: 有点忐忑,不安 今天是周天,五一调休的一个周末,只休息一天,女朋友回学校了,一个人在上海,今天一天无聊的很,现在21:00准备开始一篇博客。现在在看一个电视叫"我的阿勒泰".我女朋友推荐的.刚刚看到一句台词关于写作的:不知道写作的话,可以先去生活,去受伤!.
-
2024-04-18Unity中的C#底层原理一、Unity如何运行C# 1.1 Mono和IL2CPP 了解Mono和IL2CPP之前我们先了解一下.NET FrameWork和IL(CIL),.NET FrameWork是Windows的托管环境,可为其运行的应用提供各种服务,主要包括两个组件:公共语言运行时(CLR),它是处理运行应用的执行引擎;NET FrameWork类库:它提供开发人员可从其自己的应用中调试的已测试、可重用代码库.
-
2024-04-08WordPress博客搭建一、前言 大多数人都用过一些社交平台的博客,比如童年的QQ空间,然后就是微博.作为一名程序员之前用过CSDN发表过几篇文章,但是懂得都懂,这些平台的博客都不能自己去独立设置,所有想自己搭建个人博客,网上有很多开源的博客系统,最终选择了wordPess博客系统搭建. 二、准备工作 搭建博客前期的准备的内容: 服务器: 网上的云服务器有许多,如阿里云、腾讯云、华为云等等,个人喜欢阿里云一点,所有就在阿
-
2024-04-09初识Linux一、Linux是什么 Linux 全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,主要是一个基于POSIX的多用户、支持多线程和多CPU的操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议 . Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统 1.1 Linux的特点 Linux不仅系统性能稳定,而且是开源软件
-
2024-04-09Unity的文件与资产一、Unity的文件夹 当我们创建一个项目时,有几个默认的文件夹也会随之创建,而且这些文件夹都在Unity中有着不可或缺的作用,以下就是刚创建的4个目录(Asset、Library、Package、ProjectSettings): 1.1 Assets Assets的作用: 存放资源的根目录,也是打开Unity工程最一个目录,他的作用是给开发者用来组织管理游戏所需要的各种资源,例如脚本、模型、材
-
2024-04-09Linux的文件命令一、文件的基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限,为了保护系统的安全性,Linux系统对不同的用户访问同一文件的权限有着不同的规定. 每个文件都由10个字符来确定 第0位确定文件的类型,一共有5个字符 d 表示目录,- 表示文件,l 表示链接文档,bc不常用 读写执行分别为rwx,如果没有权限则为 - 1.1 Linux的文件属主和属组 属主:对于
-
2024-04-10Shell语法一、shell的概论 1.1 概念 shell是用C语言编写的程序,是用户通过命令行和操作系统沟通的语言,shell既是一种命令语言,也是一种程序设计语言.简述来说,shell脚本可以直接在命令行执行,即shell在终端的命令行中逐行执行.shell脚本也可以将一套的逻辑放到文件中,直接执行该文件,方便复用. 1.2 类型 在Linux中常见的shell脚本有很多种,常见的有 Bourme She
-
2024-04-11tmux和vim前言 由于看的教程为ACWing的Linux基础课,所以用的命令为yxc老师自定义的命令,主要为改动 ctrl + b 改成了 ctrl + a,以及一些常用的指令.如果要更改tmux的快捷键,可以修改Tmux的配置文件 ~/.tmux.conf. 一、tmux是什么? 1.1 概念 tmux是一个终端复用器(terminal multiplexer),指终端登录远程主机并运行后,在其中可以开启多
-
2024-04-11Git前言 当进入到公司进行多人合作开发项目的时候,版本控制工具是必不可少的. 版本控制是一种记录一个或若干文件内容变化,是对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制工具目前主要的就是两个Svn和Git .两者类似但不完全相同,本篇文章主要讲的是Git. 一、Git 的概念 Git: 一个开源的分布式版本控制系统,可以有效、高速地处理有小到
-
2024-04-08AssetBundleAssetBundle File Guid确保了资产在整个Unity工程中唯一,Local确保了Object在资产中唯一.InstanceID能够让Unity快速找到资产中的Object. AssetBundle(资产文件),AssetBundle文件结构浅析 - Pink-Floyd - 博客园 (cnblogs.com),包含两部分:包头和数据段 包头:包含有关AssetBundle的信息,比