当前位置: 首页 > news >正文

dede网站模板怎么安装网站建设年度计划

dede网站模板怎么安装,网站建设年度计划,wordpress显示标签,住房和城乡建设部网站城市稽查#x1f436;博主主页#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍#x1f525;专栏系列#xff1a;线性代数#xff0c;C初学者入门训练#xff0c;题解C#xff0c;C的使用文章#xff0c;「初学」C#xff0c;数据结构 #x1f525;座右铭#xff1a;“不要等到什么都没… 博主主页ᰔᩚ. 一怀明月ꦿ  ❤️‍专栏系列线性代数C初学者入门训练题解CC的使用文章「初学」C数据结构 座右铭“不要等到什么都没有了才下定决心去做” 大家觉不错的话就恳求大家点点关注点点小爱心指点指点 目录 树 树的概念 树的表示 二叉树 二叉树概念 特殊的二叉树 二叉树的性质 二叉树的存储结构 2. 链式存储 堆 二叉树的顺序结构 堆的概念及结构 堆排序  堆排序的实现 建堆 堆排序 TOPK 树 树的概念 树是一种非线性的数据结构它是由nn0个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树也就是说它是根朝上而叶朝下的。 图1 图2 节点的度一个节点含有的子树的个数称为该节点的度如图2:A的度为6 叶节点终端节点度为0的节点称为叶节点如图2:B、C、H、I...等为叶节点 父节点双亲节点若一个节点含有子节点则这个节点称为其子节点的父节点如图2:A是B的父节点 子节点孩子节点一个节点含有的子树的根节点称为该节点的子节点如图2:B是A的子节点 兄弟节点具有相同父节点的节点互称为兄弟节点如图2:B、C是兄弟节点 树的度一颗树中最大的节点的度称为树的度如图2:树的度为6 节点的层次从根开始定义起根为第一层根的子节点为第二层依次类推 树的高度树的深度树中节点的最大层次如图2:树的高度为4 堂兄弟节点双亲在同一层的节点互为堂兄弟如图2:H、I互为堂兄弟节点 节点祖先从根到该节点所经分支上的所有节点如图2A是所有节点的祖先 子孙以某节点为根的子树中任一节点都称为该节点的子孙如图2:所有节点都是A的子孙 森林由mm0棵互不相交的树的集合称为森林 树的表示 树结构相对线性表就比较复杂了要存储表示起来就比较麻烦了既然保存值域也要保存结点和结点之间的关系实际中树有很多种表示方式如双亲表示法孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法即左孩子右兄弟表示法。 typedef int DataType; struct Node { struct Node* _firstChild1; // 第一个孩子结点 struct Node* _pNextBrother; // 指向其下一个兄弟结点 DataType _data; // 结点中的数据域 }; 图3 树在实际中的运用表示文件系统的目录树结构 图4 二叉树 二叉树概念 二叉树Binary Tree是nn0个结点的有限集合该集合或者空集称为空二叉树或者由一个根节点和两颗互不相交的分别称为根节点的左子树和右子树的二叉树组成。 图5 1二叉树的最大度为2 2每个结点最多有两棵子树 3左子树和右子树是有顺序的 4即使树中某结点只有一颗子树也要区分左右 注意对于任意的二叉树都是由以下几种情况复合而成的 图6 特殊的二叉树 1.满二叉树一个二叉树如果每一层的节点数都达到了最大值则这个二叉树就是满二叉树。也就是说如果一个二叉树的层数为k且节点总数是2^k-1则它是满二叉树。 2.完全二叉树完全二叉树是效率很高的数据结构完全二叉树是由满二叉树而引出来的。对于深度为k的有n个节点的二叉树当且仅当每一个节点都与深度为k的满二叉树中编号从1至n的节点————对应时称之完全二叉树。要注意满二叉树是一种特殊的完全二叉树。  图7 二叉树的性质 1. 若规定根节点的层数为1则一棵非空二叉树的第i层上最多有2^(i-1)个结点. 2. 若规定根节点的层数为1则深度为h的二叉树的最大结点数是2^h-1. 3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0, 度为2的分支结点个数为 n2,则有n0n21 4. 若规定根节点的层数为1具有n个结点的满二叉树的深度hlog2^(n1) (是log以2为底n1为对数) 5. 对于具有n个结点的完全二叉树如果按照从上至下从左至右的数组顺序对所有节点从0开始编号则对于序号为i的结点有 1. 若i0i位置节点的双亲序号(i-1)/2i0i为根节点编号无双亲节点 2. 若2i1n左孩子序号2i12i1n否则无左孩子 3. 若2i2n右孩子序号2i22i2n否则无右孩子 二叉树的存储结构 二叉树一般可以使用两种结构存储一种顺序结构一种链式结构。 1.顺序存储 顺序结构存储就是使用数组来存储一般使用数组只适合表示完全二叉树因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组在逻辑上是一颗二叉树 图8 2. 链式存储 ... 堆 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事一个是数据结构一个是操作系统中管理内存的一块区域分段 堆的概念及结构 如果有一个关键码的集合K {k0,k1,k2,...,k[n-1] }把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中并满足 KiK[2*i1] 且KiK[2*i2](KiK[2*i1] 且KiK[2*i2]),i0,1,2...n 则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆根节点最小的堆叫做最小堆或小根堆。 堆的性质 堆中某个节点的值总是不大于或不小于其父节点的值 堆总是一棵完全二叉树 图9 堆排序  堆排序是利用堆这种数据结构而设计的一种排序算法他的时间复杂度是O(N*logN)相较于冒泡排序O(N*N)他的时间效率非常高。 堆排序的实现 1.将无序序列构建成一个堆根据升序(降序)需求选择大根堆(小根堆) 2.将堆顶元素与末尾元素交换将最大元素最小元素“沉”到数组末端 3.重新调整结构使其满足堆定义然后继续交换堆顶元素与当前末尾元素反复执行调整交换步骤直到整个序列有序 建堆 建堆有着两种建堆的方法向上调整建堆和向下调整建堆不管是建大根堆还是小根堆这两种方法都可以。 向上调整 这里是准备建小根堆Swap是交换函数交换两个变量的值判断最后一个孩子节点child的值是否比其父节点parent的值小如果child的值比parent的值小就交换父子节点的值然后孩子节点child的位置移到父节点parent的位置父节点parent移到父节点的父节点然后再次判断孩子节点child的值与父节点parent的值的大小直到child移到了根节点如果child的值比parent的值如果大就不用交换并且说明本次调整完成。 void AdjustUP(int* a,int n) {int childn-1;int parent(child-1)/2;while(child0){if(a[child]a[parent]){Swap(a[child], a[parent]);childparent;parent(child-1)/2;}else{break;}} } 向下调整 这里是准备建小根堆判断父节点parent的值是否比其孩子节点child一般父节点都有两个孩子节点这里的孩子节点是两个中较小的那个的值小如果child的值比parent的值小就交换父子节点的值然后父节点parent的位置移到孩子节点child的位置孩子节点child移到孩子节点的孩子节点的位置然后再次判断孩子节点child的值与父节点parent的值的大小直到child的值大于元素个数如果child的值比parent的值如果大就不用交换并且说明本次调整完成。 void AdjustDown(int* a,int n,int parent) {int childparent*21;while(childn){if(child1na[child]a[child1]){child;}if(a[child]a[parent]){Swap(a[child], a[parent]);parentchild;childparent*21;}else{break;}} } 向上调整建堆  向上建堆是从第二层开始直到第h层所以其时间复杂度为O(N*logN) for(int i1;in;i){AdjustUP(a, i);} 向下调整建堆 向下建堆是从第h-1层直到第一层所以其时间复杂度为O(N) for(int i(n-1-1)/2;i0;i--){AdjustDown(a, n,i);} 堆排序 由于有两种建堆方式向上调整建堆和向下调整建堆所以就有两种堆排序方式。 HeapSort_UP(向上建堆排序): //时间复杂度为O(N*logN) void HeapSort_UP(int* a,int n) {//向上建堆是从第二层开始直到第h层所以其时间复杂度为O(N*logN)for(int i1;in;i){AdjustUP(a, i);}int endn-1;//建堆完成后需要进行向下调整其时间复杂度为O(N*logN)while(end0){Swap(a[0], a[end]);AdjustDown(a, end,0);end--;} } HeapSort_Down(向下建堆排序): //时间复杂度为N*logN void HeapSort_Down(int* a,int n) {//向下建堆是从第h-1层直到第一层所以其时间复杂度为O(N)for(int i(n-1-1)/2;i0;i--){AdjustDown(a, n,i);}int endn-1;//建堆完成后需要进行向下调整其时间复杂度为O(N*logN)while(end0){Swap(a[0], a[end]);AdjustDown(a, end,0);end--;} } 总结向上建堆从第二层开始直到第h层向下建堆是从第h-1层直到第一层虽然它们经历的层数相同但是向上建堆中第一层不用调整向下建堆中第h层不用调整h为最后一层第一层的元素只有一个第h层元素有2^(h-1)个。所以他们的时间复杂度不同向上建堆为O(N*logN)向下建堆为O(N)尽量使用向下建堆的方式来实现堆排序。 TOPK TOP-K问题即求数据结合中前K个最大的元素或者最小的元素一般情况下数据量都比较大。 比如专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 对于Top-K问题能想到的最简单直接的方式就是排序但是如果数据量非常大排序就不太可取了(可能数据都不能一下子全部加载到内存中)。最佳的方式就是用堆来解决基本思路如下1. 用数据集合中前K个元素来建堆 前k个最大的元素则建小堆 前k个最小的元素则建大堆2. 用剩余的N-K个元素依次与堆顶元素来比较不满足则替换堆顶元素,将剩余N-K个元素依次与堆顶元素比完之后堆中剩余的K个元素就是所求的前K个最小或者最大的元素。 例如我们这里实现在1000000个数中找出5个最大的数为了方便实现我们使用rand()生成1000000个数。为了贴近实战项目我们会将这1000000个数据写到文件中然后文件中读取。 #includestdio.h #includestdlib.h #includetime.h void Swap(int* e1,int* e2) {int temp*e1;*e1*e2;*e2temp; } void AdjustDown(int* a,int n,int parent) {int childparent*21;while(childn){if(child1na[child]a[child1]){child;}if(a[child]a[parent]){Swap(a[child], a[parent]);parentchild;childparent*21;}else{break;}} } void CreatData(void) {//system(pwd\n);int n1000;srand((unsigned int)time(NULL));const char* filedata.txt;FILE* foutfopen(file, w);for(int i0;in;i){int xrand()%1000000;fprintf(fout, %d\n,x);}fclose(fout); } void PrintTopk(int k) {const char* filedata.txt;FILE* finfopen(file, r);int* kminheap(int*)malloc(sizeof(int)*k);for(int i0;ik;i){fscanf(fin,%d,kminheap[i]);}//建小堆for(int i(k-1-1)/2;i0;i--){AdjustDown(kminheap, k, i);}int val0;while(!feof(fin)){fscanf(fin, %d,val);if(valkminheap[0]){kminheap[0]val;AdjustDown(kminheap, k, 0);}}for(int i0;ik;i){printf(%d ,kminheap[i]);} } int main() {//CreatData();PrintTopk(5);return 0; } 如果大家还有不懂或者建议都可以发在评论区我们共同探讨共同学习共同进步。谢谢大家
http://www.w-s-a.com/news/670528/

相关文章:

  • 青县网站建设今天国际大事新闻
  • 深圳正规网站制作哪里好怎样优化网络
  • 米拓网站建设教程dw成品网站成品视频教学
  • 用jsp做的网站源代码天门网站网站建设
  • 百度如何把网站做链接地址有没有资源可以在线观看
  • 淮安做网站找哪家好电子商务网站建设规划书的内容
  • 开发网站建设用什么框架php黄页系统
  • 聊城制作网站全球十大电商平台排名
  • 用什么来网站开发好mega menu wordpress
  • 深圳制作网站有用吗wordpress的主题
  • 网站的规划与创建天津市南开区网站开发有限公司
  • 免备案网站主机建站哪个平台好
  • python做网站 不适合单页营销分享网站
  • 珠海市研发网站建设建设网站挣钱
  • 阿里巴巴国际站特点做wps的网站赚钱
  • wordpress更换域名后网站打不开宜昌建设银行网站
  • 写出网站开发的基本流程百度网页电脑版入口
  • 网站设计有限公司怎么样网站建设西班牙语
  • 网站安全解决方案宁波seo网络推广优化价格
  • 做网站带来好处wordpress可以做oa系统吗
  • 建筑设计人才招聘网站h5营销型网站suteng
  • 做app和网站怎样如何做html网站
  • php开发手机端网站开发更换网站标题
  • 提供网站建设报价延津县建设局网站
  • 江苏网站建设流程土巴兔全包装修怎么样
  • 环保网站建设方案带漂浮广告的网站
  • 淘宝客合伙人网站建设建站前端模板
  • 网站单页模板怎么安装中世纪变装小说wordpress
  • 手机免费建设网站制作宝安第一网站
  • 如何做x响应式网站asp网站出现乱码