- 博客(27)
- 资源 (3)
- 收藏
- 关注
原创 点乘 叉乘在Unity中的应用
Vector3.Dot 点乘Vector3.Dot(a,b)返回-1 到1,代表两条向量的方向相识度。1 = 方向相同的平行, 0代表 b垂直于a, -1 = 方向相反的平行。常使用方式1、判断位置Vector3.dot(tranform.forward,target.transform - tramform.position)大于0 = target在transform前面,小于0target在transform后面Vector3.dot(tranform.right,target..
2020-09-25 10:07:53
262
原创 多线程 锁
Synchronization属性和ContextBoundObject类(锁整个类)Synchronization属性和ContextBoundObject类,这两个一起使用可以让一个类的实例处于同步环境中。自动同步,CLR确保了同一时刻只有一个线程可以执行继承自ContextBoundObject实例中的代码。锁的作用域——这里是继承自ContextBoundObject实例对象,被称...
2019-06-11 11:35:06
432
原创 堆 栈 堆栈
老是容易混淆,记录记录吧。主要分为内存上 和数据结构上。堆栈=栈堆、栈内存上的差别:栈(stack 操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。存指针,引用。每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访...
2019-06-11 10:02:16
1885
原创 Unity 使用Protobuf3.0踩坑日记(.net4.x)
网上查了比较多的资料,看的稀里糊涂。说说.net4.0下如何方便使用Protobuf吧.两种用法:1、网上查到在NuGet(VisualStudio的一个插件平台)上有一个.net移植版的Protobuf。我没采用这一个,具体不知道方便不方便。2、官方的Github下载Protobuf(https://github.com/protocolbuffers/protobuf),我采用这种...
2019-05-14 17:12:51
1929
原创 散列(Hash)的冲突解决方法-开放定址法
1、线性探测法通过散列函数求出应放的位置后,如果当前位置有值,则往后顺延。 比如地址等于0时,在0上有值,则尝试去放入1的地址中。依次往后顺延。在表中的成功查找平均长度等于每一个地址上的冲突次数+1的总和除去总数组个数。不在表中的查找平均长度的话则通过散列函数算出地址后,去查看地址上是否是自己,如果不是则往后顺延,一直顺延到当前顺延地址值为空或者自己时方为结束。...
2019-03-29 14:41:44
1500
原创 散列(Hash)
散列的定义:数字关键字的常见散列函数算法:字符串关键字的常见散列函数算法:散列对比其他数据结构的优缺点:1、散列的查找难度跟数据所占空间大小关系不大。冲突处理的好的话O(1)直接就能找到。2、适合字符串的管理(字符串比对麻烦,需要一个字符一个字符比对,但是散列将其变成了数字对比)。3、以空间换时间...
2019-03-22 11:07:12
199
原创 基数排序
基数排序则是通过几轮比较N个整数的基数(进制,图中为10进制,每一位数只有10种可能,按这个来建桶(Bucket))来达到排序的效果。次位优先,先按个位数来排序。主位优先,则是按最大位数来排序...
2019-02-28 11:10:22
155
原创 表排序
适用于结构体,复杂数据。用table存储具体的索引位置。按table从0-n来存储排序后数据的所在位置,例如图中table【0】存储的是3,则取A的第3个位置上的数据a。table【1】存储的是5,则取A的第5个位置上的数据b。这样就避免了排序时,需要移动数据位置。在数据比较复杂较大时,移动需要耗费较多时方便...
2019-02-28 10:33:11
140
原创 快速排序
传说中最快的....跟归并类似,以图中为例, 取65为 pivot, 将其他数据分成两块,然后递归排序左边和右边,然后把三块的结果放到一个数组即完成.选pivot对快速排序来说极其重要,会极大的影响快速排序是真快还是假快......Cutoff为数据大小的一个限制点, 当所剩的待排数据少于Cutoff时,就没必要再用快速排序了,转为插入排序。通过Me...
2019-02-26 17:28:38
136
原创 归并排序
3个指针,A,B,C A和B对比,挑选小的一方将其存入指针C中,然后将对比中小的一方的指针和C指针向后指向一位,继续比较。列如 A指向 A1 = 1 B指向B1 = 2 C指向C1,对比中A1比B1小,则C = C1 = 1,然后将指针A改成A2,C改成C2,由此循环下去。 递归的由小到大的归并...
2019-02-22 17:33:30
111
原创 希尔排序
优化版的插入排序,插入排序中为前后相互比较进行排序,间隔为1。而希尔则是设置了这个间隔,确保一个正确的间隔,将数据分成一个一个小组,进行插入排序对比。如上图中,先间隔5的进行分组的插入排序,列如,第一分组起始为81,插入35 35对比81 互换,插入41,41对比81 ,互换,41对比35 不变。这样则完成了一个分组的对比。然后间隔为5的分组插入排序完毕后,数据只是在分组内相对...
2019-02-22 14:11:53
153
原创 冒泡排序
冒泡排序的好处:用于数据结构为链表时,更为方便。相邻元素对比和互换。 原理: 前后两个元素对比,将大的元素排在下面。通过双重循环达到排序效果。图中flag是为了优化排序,当在双重循环还未循环完毕的时候,如果已经完成了排序,则通过标记flag达到结束的效果...
2019-02-20 10:21:28
128
原创 最小生成树
最小生成树意义在于 在一个连通图中找到一个边的权重和最小并且连通全部点,且是没有回路的. 算法有很多种,不过都可以归为贪心算法. 其中两种比较有名的为:Prim算法,基本思路为从一颗根节点开始让一颗小树慢慢长大 https://blog.youkuaiyun.com/u013245479/article/details/86657295kruskal算法,基本思路为把...
2019-01-26 15:45:10
652
原创 贪心算法 - Prim算法
基本思路为从一颗根节点开始让一颗小树慢慢长大 .从根节点开始,每次找一个与当前树有直接边的邻接点,每次找一个最小权重的边,将其边和点收入到树内,树就长大了,然后继续往外长这颗树.反复循环. 以上图的情况来看以V1为起点最小生成树的生成顺序为:V1(V4最近只有1) - V4(此时树为V1+V4找与他们最近的边) - V2(V3,V2顺序无所谓先后) - V3(V...
2019-01-26 15:16:05
1910
转载 前向星
前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置.那么对于下图:我们输入边的顺序为:1 22 33 4...
2019-01-26 14:46:38
7293
原创 dijkstra算法
从未收录的顶点中找一个距离最小的,拿出来后设置成已访问,并遍历这个点的所有邻接点,如果邻接点没有被访问过,且从原点到该点的距离+该点到邻接点的距离小于原点到邻接点的距离话,则证明找到了一条比原先距离更短的路线,进行数据替换,并记录该路线上邻接点的上一个节点,便于路线的记录 ...
2019-01-26 14:45:51
97
原创 数据结构之图
图的常见术语:1、无向图 所有的边无所谓方向的图2、有向图边有可能有方向也有可能没方向,边对图来说重要。3、网络边上有权重的图 (每一条边上有数字,用于表示一些作用)边是顶点对,无向边用(v,x) 双向通道有向边用<v,x> 单向通道,表示从V到X的边 在程序中表现图分为两种,1、邻接矩阵。1+2+3+4+.....+...
2018-11-28 15:14:40
192
1
原创 数据结构之哈夫曼
哈夫曼树的特点: 父节点是两个子节点的和。 利用最小堆来做,每次从最小堆中取出两个分别放到新树的左节点和右节点,然后父节点的值等于左右节点的权值和,再将此父节点插入到最小堆中。 因此哈夫曼树没有度(子节点)为1的节点,所以由上图可知,由于任何非空二叉树,若N0表示叶节点个数,n2是度为2的非叶节点个数,那么两者满足关系 n0 = n2+1,解析如下: n0+n1+n2-1 = 0...
2018-11-19 18:38:54
812
原创 数据结构之二叉堆
堆的两个特性:1、 结构性: 用数组表示的完全二叉树2、有序性:任一节点的值是其子树所有节点的最大值或最小值(最大堆或者最小堆)最大堆 的插入 :将元素插入到数组的最后一个(lastIndex),通过 lastIndex /2 取得上一层节点的值,进行比较,如果父节点大,则插入到lastindex,如果父节点小,则将父节点换到lastindex,将插入的元素换到父节点位置,如此循环...
2018-11-19 18:25:48
161
1
原创 数据结构之二叉树
基础概念:节点的度:一个节点含有的子树的个数叶节点或终端节点:度为零的节点; 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层 树的高度或深度:树中节点的最大层次;树的类型:1、满二叉树:一棵深度为k,且有2^k-1 (2的k次方减一)个节点称之为满二叉树 (也称完美二叉树,就是节点全有,只有度为2和0的节点)2、完全二叉树: 如上图描述,一一对应,但是可...
2018-11-19 18:15:21
418
1
原创 AssetBundle学习笔记
AssetBundle加载步骤通过AssetBundle加载资源,分为两步,第一步是获取AssetBundle对象,第二步是通过该对象加载需要的资源。而第一步又分为两种方式,下文中将结合常用的API进行详细地描述。一、获取AssetBundle对象的常用API(1)先获取WWW对象,再通过WWW.assetBundle获取AssetBundle对象:public WWW(stri...
2018-11-01 13:44:35
125
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人