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

aspcms 网站搬家WordPress安装在Windows

aspcms 网站搬家,WordPress安装在Windows,如何建设网站济南兴田德润团队怎么样,服务器安全加固目录 1.为什么使用双堆法 2.双堆法的思路 插入过程: 调整过程: 3.代码实现 1.为什么使用双堆法 对于一个无序区间的中位数查找,我们最先想到的应该是排序算法,快速排序,归并排序等都是很好的方式,时…

目录

1.为什么使用双堆法 

2.双堆法的思路

插入过程:

调整过程:

3.代码实现


1.为什么使用双堆法 

      对于一个无序区间的中位数查找,我们最先想到的应该是排序算法,快速排序,归并排序等都是很好的方式,时间复杂度都是nlogn。而双堆法呢,每次插入一个元素,进行堆的顺序调整的时间复杂度为logn,那么插入n个元素时间复杂度也就一样时nlogn了,而且还需要额外的n的空间复杂度,为什么还要用双堆法呢?

        对于一个数据量不变的区间排序,用sort是很好的,但是呢,如果数据量变化呢?每增加一个元素都需要重新调用一个快速排序,那么插入n个元素的话,就是n * nlogn的时间复杂度了,这样就非常慢了,但是使用双堆法的话,只需要对新的元素放入对应的堆空间,进行一次logn的位置改变即可。所以说对于一段数据量变化的空间,还想要一直找到区间的中位数的话,使用双堆法是个不错的选择。

2.双堆法的思路

        顾名思义是采用两个堆,一个是大堆,一个是小堆,同时维护这两个堆的数据个数,小堆的数据个数最多可以比大堆的数据个数多一个,那么的话,如果是奇数个数的区间的话,那么中间值就放在了小堆的堆顶,如果是偶数个数的区间的话,那么就是根据要求了,选左边作为中间值的话,就是大堆的堆顶,如果是右区间作为中间值的话,就是小堆的堆顶了。

插入过程:

        对于堆的top函数调用,如果堆为空的话,调用该函数会报错的,所以刚开始插入的时候,让其自动先放到小堆中,之后再插入的时候,就可以判断是否比小堆大了,大的话放到小堆里面,否则放到大堆里面。

// 如果大堆为空的话,先插入小堆 or 该元素比小堆的堆顶大
if (minHeap.empty() || item > minHeap.top())minHeap.push(item);
// 该元素比小堆的堆顶还小
elsemaxHeap.push(item);

        当然也可以先放到大堆里面,然后判断元素的值是否是小于大堆的堆顶,如果是的话放到小堆,如果不是的话放到小堆中。 

调整过程:

        如果奇数个数的区间的时候,想让中间值放到小堆的堆顶的话,就规定小堆的元素个数最多可以比大堆多一个,而且大堆的个数不能多于小堆即可。如下图代码所示。

// 如果说小堆的数据比大堆+1还多
if (maxHeap.size() + 1 < minHeap.size())
{maxHeap.push(minHeap.top());minHeap.pop();
}
// 如果大堆的元素比小堆多
else if (maxHeap.size() > minHeap.size())
{minHeap.push(maxHeap.top());maxHeap.pop();
}

        如果奇数个数的区间的中间值想要放到大堆的堆顶的时候,就可以规定大堆的元素个数最多比小堆多一个,小堆的元素个数不能多于大堆即可。

3.代码实现

#include <iostream>
#include <queue>
#include <vector>int FindMiddenNumber(const std::vector<int>& num)
{std::priority_queue<int> maxHeap;										// 大堆std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;	// 小堆// 将数据插入for (auto item : num) {// 如果大堆为空的话,先插入小堆 or 该元素比小堆的堆顶大if (minHeap.empty() || item > minHeap.top())minHeap.push(item);// 该元素比小堆的堆顶还小elsemaxHeap.push(item);// 如果说小堆的数据比大堆+1还多if (maxHeap.size() + 1 < minHeap.size()){maxHeap.push(minHeap.top());minHeap.pop();}// 如果大堆的元素比小堆多else if (maxHeap.size() > minHeap.size()){minHeap.push(maxHeap.top());maxHeap.pop();}}if (maxHeap.size() == minHeap.size())return maxHeap.top();elsereturn minHeap.top();
}int main()
{// 测试用例 1: 奇数个元素std::vector<int> test1 = { 1, 2, 3, 4, 5 };std::cout << "Test 1: " << FindMiddenNumber(test1) << std::endl;// 测试用例 2: 偶数个元素std::vector<int> test2 = { 1, 2, 3, 4 };std::cout << "Test 2: " << FindMiddenNumber(test2) << std::endl;// 测试用例 3: 包含负数std::vector<int> test3 = { -1, -2, -3, -4, -5 };std::cout << "Test 3: " << FindMiddenNumber(test3) << std::endl;// 测试用例 4: 包含零std::vector<int> test4 = { 0, 1, 2, 3, 4 };std::cout << "Test 4: " << FindMiddenNumber(test4) << std::endl;// 测试用例 5: 所有元素相同std::vector<int> test5 = { 5, 5, 5, 5, 5 };std::cout << "Test 5: " << FindMiddenNumber(test5) << std::endl;return 0;
}

http://www.dtcms.com/wzjs/805800.html

相关文章:

  • 酒店网站建设功能公司网站百度排名没有了
  • 外贸soho网站建设线上网站开发系统流程
  • 聊城手机网站建设费用网络设计解决如何将初步规划中的各个子系统从内部用
  • 站内优化包括哪些如何删除图标wordpress
  • 中国万网域名官网网站优化 福州
  • 大学生网站开发与设计实训报告asp.net做三个网站
  • 肇庆住房建设部网站wordpress自定义tag标签
  • 南昌哪家网站开发公司好值得相信的西安网站开发
  • 规划建网站步骤芜湖有哪些招聘网站
  • 做网站竞价没有点击率网站的友情链接是什么意思
  • 各大网站发布信息淘宝网电脑版登录
  • 网站开发费算无形资产吗如何做高端网站
  • 沅江网站制作互联网公司名称大全
  • 专做零食的网站东营市公司网站建设价格
  • 网站建设费摊销年限做旅行网站
  • 常州微元宝网站建设网站制作工具 织梦
  • 微信公众号私自建设电影网站网站建设公司推荐金石下拉g
  • 做资料分享网站有哪些网站怎么做搜索引擎
  • 建网站软件百度图片识别在线识图
  • 做微网站多少钱整合营销策划方案模板
  • 服务器屏蔽网站网络营销推广软件
  • 杭州网站推广找哪家揭阳cms建站模板
  • 蓝色大气网站模板网页制作基础教程第二版
  • 自己做店铺网站宣城网站优化
  • 自己电脑做的网站如何映射到公网百度h5在线制作免费
  • 雨花区区网站建设公司公司seo是什么
  • 做投票链接的网站怎么做网站切图
  • 黄石建网站怎么做网站投放广告的代理商
  • 做排名出租网站企业宣传策划公司
  • 网站建设关键技术php网站 缓存