问题描述:
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。对于给定的n个自然数组成的多重集S,计算S的众数及其重数 。

问题分析:
1、 分治法
分治法解题过程主要分为分、治、合三个步骤“,应用该方法的基本过程如下:
(1) 将原问题分解为若干个规模较小的子问题
(2) 对这些子问题分别求解
(3) 对各个子问题的解进行合并

2、 众数:一组数据中出现次数最多的数值,叫众数。有时一组数据中有多个众数。
重数:重数是指该众数出现的次数。

3、 根据以下实例理解分治法求解众数及其重数
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
例如,S = {1,2,2,2,3,5}。
多重集S的众数是2,其重数是3.

算法实现:

// Test_01.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"void split(int s[],int n,int &l,int &r){int mid = n/2;for(l = 0; l<n; ++l){if(s[l] == s[mid])break;}for(r = l+1;r<n;++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 - 1;if(cnt > maxCnt){maxCnt = cnt;mid = s[num];}//l表示左边的个数,左边的个数必须大于中位数的个数,才有进行搜索的意义if(l+1 > maxCnt){getMaxCnt(mid, maxCnt, s, l+1);}//同理,右边的个数将要大于中位数的个数才有继续搜寻的意义,同时右边数组的起始位置进行改变if(n-r > maxCnt){getMaxCnt(mid, maxCnt, s+r, n-r);}
}int _tmain(int argc, _TCHAR* argv[])
{int s[] = {1,2,2,2,3,5};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;
}

运行结果
由于初始数组为int s[] = {1,2,2,2,3,5};所以运行结果中众数为 2 重数为 3

2 3
请按任意键继续. . .

算法设计--众数和重数问题(分治法)相关推荐

  1. 深大算法设计与分析实验二——分治法求最近点对问题

    源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...

  2. 算法设计思想(4)— 分治法

    1. 分治法概念 分治,顾名思义,分而治之. 具体来说,它先将一个难以直接解决的大问题,分割成一些可以直接解决的小问题.如果分割后的问题仍然无法直接解决,那么就继续递归地分割,直到每个小问题都可解. ...

  3. 算法设计练习题(1)——分治法

    1. 给定一个数组A,任务是设计一个算法求得数组中的"主元素",即在数组中个数超过数组总元素个数一半的元素.但是数组中元素的数据类型可能是复杂类型,这意味着数组中的元素进能够比较是 ...

  4. 算法设计与分析 实验二 分治法求解最近点对问题

    分治法求解最近点对问题 一.实验目的与要求 1.实验基本要求 2.实验亮点 二.实验内容与方法 三.实验步骤与过程 (一)一些准备工作 1.实验流程 2.数据生成与去除重复点 (二)暴力穷举法 1.算 ...

  5. 【算法设计与分析】关于分治法的一些(伪)代码整理

    分治法 合并排序 利用分治法求一个元素在数组中的最大位置 利用分治法求一个n元素数组的最大元素和最小元素的值 是否稳定 快速排序 合并排序 利用分治法求一个元素在数组中的最大位置 伪代码: MaxIn ...

  6. 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的众数及其重数. 众数------一组元素中出现的次数是最多的 重 ...

  7. 算法复习笔记(三)分治法

    算法复习笔记(三)分治法 1.引入语 分治法划分对策: 子问题与原问题相比:问题性质一致,问题规模不同 求解一般分为三个阶段: 1.划分:直到问题足够小可以直接求解为止 2.求解: 3.合并:将子问题 ...

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

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

  9. c语言分治法求众数重数_分治法求众数问题 (配图)

    标签: 采用分治法,以中间为界限, 先计算围绕中间这个数字的众数情况,然后左右分开递归计算结果,取最值即可. 左右递归计算的时候要先做判断,假如左边或是右边的个数都比已求的重数小,就没必要计算了,即使 ...

最新文章

  1. 为CentOS 7安装VMware-tools
  2. 几乎死循环的存储过程
  3. Java8函数式编程(5)--中间操作(源码)
  4. 中信证券:维持贝壳“买入”的投资评级
  5. axis1.4 wsdl2java_axis2(1.4及以上版本) wsdl2java 使用方式 | 学步园
  6. 酒局中同事说“不把这杯酒喝了就是不给我面子”,我该怎么办?
  7. cocos creator入门教程(十八)—— creator_Director对象与资源加载策略
  8. COM06-Can通信协议栈架构【最高峰】
  9. xshell安装教程
  10. Unity操作文件对话框
  11. Innovator Admin 一个aras的管理器,又一个package安装方法
  12. 学云计算比较好的几个论坛
  13. 复数加减java_用java实现复数的加减乘除运算
  14. 【密码学】古代、古典密码
  15. (转)一致性哈希算法原理
  16. 计算机学院优秀主讲教师评选细则,徐州工程学院优秀主讲教师评选办法 徐工院行教[2015]35号...
  17. 【特征选择】过滤式特征选择法
  18. 【bzoj4084】[Sdoi2015]bigyration hash
  19. php织梦网站如何设置头,织梦dedecms网站的安全设置教程
  20. 个人发卡网源码搭建教程

热门文章

  1. 神经网络下采样、上采样——图文计算
  2. [转载]Win 7 OS: ReadyFor4G使用方法
  3. C++ 比赛时 无穷小、无穷大的设定
  4. 瓜瓜选妃 (二维差分 前缀 二分
  5. 【编译原理】手工构造词法分析器
  6. iis服务器的 字体文件, 提示文件或目录不存在,找不到文件
  7. tensorflow2图像分类实战激活函数selu
  8. LeetCode——765. 情侣牵手(Couples Holding Hands)——分析及代码(Java)
  9. QQ开始支持离线传文件
  10. 格兰杰因果检验_Python实现