标签:

采用分治法,以中间为界限, 先计算围绕中间这个数字的众数情况,然后左右分开递归计算结果,取最值即可。

左右递归计算的时候要先做判断,假如左边或是右边的个数都比已求的重数小,就没必要计算了,即使左边或是右边全部都是一样的,那么他的重数也是小于已求的,所以没必要进行运算,这一周在加深分治算法的学习,这题着实花了我不少时间。

具体代码:

// 用分治法求众数

#include

#include

using namespace std;

// 本程序的关键, 以中间的数字为界限, 确定左右起始和终止界限

void split(int s[], int n, int &l, int &r)

{

int mid = n/2;

for(l=0; l

{

if (s[l] == s[mid])

break;

}

for(r=l+1; r

{

if (s[r] != s[mid])

break;

}

}

// num 众数, maxCnt 重数

void getMaxCnt(int &mid, int &maxCnt, int s[], int n)

{

int l, r;

split(s, n, l, r); // 进行切割,这个函数是本程序的关键

int num = n/2;

int cnt = r-l;

// update

if (cnt > maxCnt)

{

maxCnt = cnt;

mid = s[num];

}

// l 表示左边的个数,左边的个数必须大于 maxCnt 才有必要搜寻

if (l+1 > maxCnt)

{

getMaxCnt(mid, maxCnt, s, l+1);

}

// 右边搜寻, 右边数组的起始地址要变更

if (n-r > maxCnt)

{

getMaxCnt(mid, maxCnt, s+r, n-r);

}

}

int main(void)

{

int s[] = {1, 2, 2, 2, 3, 3, 5, 6, 6, 6, 6};

int n = sizeof(s)/sizeof(s[0]);

int maxCnt = 0;

int num = 0;

getMaxCnt(num, maxCnt, s, n);

printf("%d %d\n", num, maxCnt);

return 0;

}

大概思路图:

版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/core__code

标签:

c语言分治法求众数重数_分治法求众数问题 (配图)相关推荐

  1. c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...

    分治法求众数 Problem Description 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为 众数.例如,S={1,2,2,2,3,5}. ...

  2. c语言分治法求众数重数_分治法实现众数问题--例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。...

    题目的描述: 例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3. 对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数. 众数------一组元素中出现的次数是最多的 重 ...

  3. c语言分治法求众数重数_分治算法:求众数及其重数

    问题描述: 给定含有 n 个元素的多重集合 S,每个元素在 S 中出现的次数称为该元素的重数.多重集合 S 中重数最大的素称为众数.例如多重集合 S={1,2,2,7,2,7,5},其中众数是 2,其 ...

  4. c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf

    算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...

  5. c语言分治法求众数重数_五大常见算法策略之——递归与分治策略

    递归与分治策略 递归与分治策略是五大常见算法策略之一,分治策略的思想就是 分而治之 ,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的 ...

  6. python求回数_用python求回数

    今天学到filter函数,做一道练习题,求回数的,我前前后后差不多用了半个小时才把它弄出来,先是有思路了然后写出来后一直报错,又改改换换,最后其实是某个小问题导致的,每次查这种小问题时都先怀疑是不是思 ...

  7. python求数组平均值_用python求一个数组的和与平均值的实现方法

    用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...

  8. python求素数积_用Python求素数的快速算法源码示例

    本篇文章为Python算法相关,用Python求素数的快速算法源码示例.算法在Python的学习中算是一个要点,能研究明白算法的同学都可以算的上是Python的大牛了. 首先简单的来说下什么是素数:质 ...

  9. java试构求圆面积方法_用构造方法求圆的周长和面积

    package com.may.eight; import java.util.Scanner; public class Circle { private int radius; // 圆半径 pr ...

最新文章

  1. AtCoder Petrozavodsk Contest 001
  2. 考系统架构设计师必看--微内核操作系统
  3. JQuery窗口拖动效果
  4. 学python需要记得的单词_学习Python必背的初级单词有哪些?
  5. Windows中多线程同步之事件(Event)
  6. SAN,NAS区别的联系
  7. Socket 实现聊天功能
  8. idea 配置mysql逆向_idea逆向工程配置
  9. springboot的restful接口成功失败返回值设计
  10. Adobe CS3 Design Premium 2DVD完全版(原盘镜像)
  11. 使用cmd命令行装逼,让命令行滚动起来
  12. ubuntu linux 批量删除文件
  13. 工业机器人图册 索罗门采夫_机械手控制系统设计(完整图纸)
  14. Canvas动画案例演示,含动画猫、变幻线、代码雨等
  15. 新版mysql的下载教程_Mysql最新版8.0.21下载安装配置教程详解
  16. 我不想在做桌面运维了、我想做linux运维、我也要运维高薪
  17. JVM笔记十四:方法区
  18. apache基于端口的虚拟主机配置
  19. 【C#】记录一次上位机软件界面闪退分析及解决方案
  20. 表达式转换 (中缀转后缀表达式)

热门文章

  1. Android 主题栏,信息栏,深色信息栏(更改手机顶部显示字体/图标颜色为深色)
  2. 基于多元线性回归的房价预测
  3. c语言反汇编过程,利用反汇编手段解析C语言函数
  4. 验证码识别软件的六大钻石亮点!
  5. #初入门 各类加密方法的判断(1)
  6. 网易笔试题——骰子游戏
  7. 宝塔数据库相关问题解决
  8. win10下node使用管理神器NVM安装配置详细步骤
  9. netty的channel配置参数详解
  10. JavaScript笔记 | 作用域和闭包 |《你不知道的JavaScript(上卷)》第一部分