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

自己做网站要不要租服务器免费浏览网站推广

自己做网站要不要租服务器,免费浏览网站推广,wordpress文章为啥数据库中找不到,中冠工程管理咨询有限公司目录 堆的意义: 第一是堆的排序,第二是堆的top k 排行问题 堆的 top k 排行问题: 面对大量数据的top k 问题: 堆排序的实现:——以升序为例 方法一 交换首尾: 建立大堆: 根结点尾结点的…

目录

 堆的意义: 

第一是堆的排序,第二是堆的top k 排行问题

堆的 top k 排行问题:

面对大量数据的top k 问题:

 堆排序的实现:——以升序为例

方法一  交换首尾: 

建立大堆:

根结点尾结点的交换配合自上而下的操作:

自上而下的函数 :

自下而上的函数:

源文件: 

主函数部分:

方法二  反复横跳: 

实现: 

top K 排行问题:— 以处理较多数据为例,最大的前K个数

创建数据并存储到文件中: 

创建K个数的小堆: 

 进行交换:

打印堆: 

完整代码: 

自上而下调整的时间复杂度:

自下而上调整的时间复杂读: 

 


 堆的意义: 

第一是堆的排序,第二是堆的top k 排行问题

堆的 top k 排行问题:

  • 堆的top k 排行问题主要是利用了 大堆或者小堆的堆顶一定是最大或者最小值的特点,再利用了堆的删除操作,从而进行堆的一种大小排序,从而形成一种升序或者逆序的top榜单排满。

面对大量数据的top k 问题:

再面对大量的数据时,如果要进行排列前k个最小的数值时,可以先创建一个拥有K个结点大小的小堆,随后再进行插入,将插入的数据和栈顶元素进行比较,如果比栈顶元素小,那么替换栈顶元素,随后再和栈顶下的各个结点进行比较和交换。

这种做法到最后,形成了一种栈顶是最小的元素的结果,这种方法也相当于是一种末位淘汰制。 

 堆排序的实现:——以升序为例

  • 关于升序,一般大多数人会想到使用小堆,因为小堆的特点是父节点比子节点小,而堆的底层结构又是数组,所以大多数人最初想到的是使用小堆来实现堆排序问题。
  • 但这是错误的,因为堆其实是一种选择排序。

如果排升序建立小堆,我们可以一开始获取最小的数字,但是我们下一步呢,如果找第二小的数字?

如果要找第二个最小的数字,如果在当前这个堆的基础上找,那么关系全乱了,因为要在兄弟之间,要在父亲的兄弟之间,父亲的兄弟的孩子之间找

这时候只能重新建一个堆,但是建堆的代价是时间复杂度的重复性。

所以,使用大堆来解决堆排序的升序问题!

方法一  交换首尾: 

 根据,堆删除的一种思想,交换!

根结点元素和尾结点元素的交换,以大堆的父结点元素比子结点元素大的特点,最后一个结点的元素是堆的最小值,而根结点的元素是堆的最大值,当二者进行交换后,最小值跑到了根结点位置,最大值跑到了最尾部结点。

而此时,使用循环的方法再结合屏蔽尾部结点的方法,在轮流交换的过程下,很快就会形成一个以大堆的基础构建的小堆,而小堆在数组中的排序便是升序的! 

建立大堆:

使用之前构建堆的方法过于繁琐,所以可以利用现成数组和自下而上的交换方法进行大堆的建立 

根结点尾结点的交换配合自上而下的操作:

- -end是用来屏蔽每一会的最尾结点,end 是下标的意思,n是数组大小的意思。

 

自上而下的函数 :

自下而上的函数:

源文件: 

主函数部分:

方法二  反复横跳: 

反复横跳的核心是找到最后一个结点的父节点,进行自上而下的交换,利用升序和大堆的特点——父结点比子结点大,将父结点的元素和子结点的元素进行交换。

  • 且每一次交换后都会形成一颗子树,这时候在将这颗子树的下标跳到隔壁子树上,再度进行刚才的操作,这样一来,左右子树的父子结构均不会被破坏,且还会变成一个升序的小堆。

实现: 

i  表示为父结点的下标,n一开始是最尾部结点的下标。 


top K 排行问题:— 以处理较多数据为例,最大的前K个数

 在之前上文堆的意义中,详细讲过了堆的top k问题,而这里以处理较多数据的top k 为例

创建数据并存储到文件中: 

这一步主要是怕数据过多导致终端卡顿 

  •  代码解读:
  • srand 函数进行选取随机,然后在使用time传输随机值,然后以写("w")的方式打开文件
  • 然后因为要产生一千万个数值,而rand只能产生三万多个数字所以需要+i并%上10000000
  • 之后将这些数据写入文件中(fprintf),最后关闭文件,fin是文件的指针变量

file 是指向文件的指针,fin是文件内部进行内容操作的指针 

 

创建K个数的小堆: 

  •  根据小堆的特点,根部是堆中最小的数字,如果需要寻找最大的数,则可以通过堆顶的根结点元素进行第一道排查
  • 而比堆顶大的数则替换堆顶元素,随后根据小堆的特点,父结点比子结点小,从而进行自上而下的交换,把较大的元素丢到堆的尾部进行二次的排查。
  • 这样到最后,最后一个结点是最大的数,而堆顶的根结点元素则是这一千万个数种第K个最大的数。

  • 注意,这里还是使用了数组构建堆的方法,而进入数组中的元素由fscanf函数从之前创建好的文件中拿取。 
  • 使用了malloc建立了一个能够存放K个元素的字节 的 空间大小,作为数组。
  • fscanf是从指定标准流中获取内容,scanf是从键盘标准流中获取内容
  • fascnf 的三个参数分别是,一个文件类型的指针负责读取数据,一个读取后展示的格式,第三个是读数后读取的数据存放的空间
  • fscanf读完数据后会返回EOF

 进行交换:

因为fscanf读完数据后会返回EOF,所以 以此作为判定条件,x用来寄存从文件中读取的元素,当x比堆顶根结点元素大时,替换堆顶根结点元素,随后进行自上而下的交换进行调整堆的元素,以此维持小堆结构。 

打印堆: 

  • 最后将堆打印 

 

完整代码: 


自上而下调整的时间复杂度:

自下而上调整的时间复杂读: 


 

http://www.hkea.cn/news/127060/

相关文章:

  • 哪个网站做漫画可以有钱营销型网站设计
  • wordpress在线视频直播湖南正规关键词优化
  • 花木企业网站源码全网推广的方式
  • 网站开发商怎么关闭图片显示站长之家新网址
  • 灯饰如何做网站推广纯手工seo公司
  • 晋中公司做网站seo站长之家
  • 到哪里找人做网站优化seo培训班
  • 深圳网站开发哪家专业搜索到的相关信息
  • 湖北武汉网站制作引擎搜索下载
  • 做网站登录的需求分析seo点击排名工具有用吗
  • 诸暨住房和城乡建设委员会网站怎么制作网站?
  • 昆明cms建站模板视频号排名优化帝搜软件
  • 商务咨询网站源码重庆网站建设哪家好
  • 建设部网站从何时可以查询工程师证深圳全网推广服务
  • 网页制作工具的选择与网站整体风格是有关系的友情链接论坛
  • 免费商会网站模板百度推广账号
  • 玄武模板网站制作品牌关键词排名点击软件网站
  • 网站title的写法微信软文怎么写
  • 设计企业网站流程磁力引擎
  • 橙色企业网站模板域名注册购买
  • 培训建设网站线上推广产品
  • 写作网站不屏蔽全网关键词指数查询
  • wordpress手机uiseo关键词的选择步骤
  • 自己制作网页的步骤windows优化大师在哪里
  • 黑龙江企业信息系统seo推广优化外包公司
  • wordpress+增加域名赣州网站seo
  • 政府门户网站建设思路怎样优化网络
  • 厦门个人网站建设百度账户代运营
  • 企业网站开发注意什么企业网站官网
  • 网站建设开发合同书关键词怎么找出来