算法设计--众数和重数问题(分治法)
问题描述:
给定含有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
请按任意键继续. . .
算法设计--众数和重数问题(分治法)相关推荐
- 深大算法设计与分析实验二——分治法求最近点对问题
源代码: 深大算法设计与分析实验二--分治法求最近点对问题代码-C/C++文档类资源-CSDN下载 目录 实验问题 一.实验目的: 二.内容: 三.算法思想提示 产生不重复的随机点算法: 蛮力算法: ...
- 算法设计思想(4)— 分治法
1. 分治法概念 分治,顾名思义,分而治之. 具体来说,它先将一个难以直接解决的大问题,分割成一些可以直接解决的小问题.如果分割后的问题仍然无法直接解决,那么就继续递归地分割,直到每个小问题都可解. ...
- 算法设计练习题(1)——分治法
1. 给定一个数组A,任务是设计一个算法求得数组中的"主元素",即在数组中个数超过数组总元素个数一半的元素.但是数组中元素的数据类型可能是复杂类型,这意味着数组中的元素进能够比较是 ...
- 算法设计与分析 实验二 分治法求解最近点对问题
分治法求解最近点对问题 一.实验目的与要求 1.实验基本要求 2.实验亮点 二.实验内容与方法 三.实验步骤与过程 (一)一些准备工作 1.实验流程 2.数据生成与去除重复点 (二)暴力穷举法 1.算 ...
- 【算法设计与分析】关于分治法的一些(伪)代码整理
分治法 合并排序 利用分治法求一个元素在数组中的最大位置 利用分治法求一个n元素数组的最大元素和最小元素的值 是否稳定 快速排序 合并排序 利用分治法求一个元素在数组中的最大位置 伪代码: MaxIn ...
- 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的众数及其重数. 众数------一组元素中出现的次数是最多的 重 ...
- 算法复习笔记(三)分治法
算法复习笔记(三)分治法 1.引入语 分治法划分对策: 子问题与原问题相比:问题性质一致,问题规模不同 求解一般分为三个阶段: 1.划分:直到问题足够小可以直接求解为止 2.求解: 3.合并:将子问题 ...
- c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...
分治法求众数 Problem Description 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数.多重集S中重数最大的元素称为 众数.例如,S={1,2,2,2,3,5}. ...
- c语言分治法求众数重数_分治法求众数问题 (配图)
标签: 采用分治法,以中间为界限, 先计算围绕中间这个数字的众数情况,然后左右分开递归计算结果,取最值即可. 左右递归计算的时候要先做判断,假如左边或是右边的个数都比已求的重数小,就没必要计算了,即使 ...
最新文章
- 为CentOS 7安装VMware-tools
- 几乎死循环的存储过程
- Java8函数式编程(5)--中间操作(源码)
- 中信证券:维持贝壳“买入”的投资评级
- axis1.4 wsdl2java_axis2(1.4及以上版本) wsdl2java 使用方式 | 学步园
- 酒局中同事说“不把这杯酒喝了就是不给我面子”,我该怎么办?
- cocos creator入门教程(十八)—— creator_Director对象与资源加载策略
- COM06-Can通信协议栈架构【最高峰】
- xshell安装教程
- Unity操作文件对话框
- Innovator Admin 一个aras的管理器,又一个package安装方法
- 学云计算比较好的几个论坛
- 复数加减java_用java实现复数的加减乘除运算
- 【密码学】古代、古典密码
- (转)一致性哈希算法原理
- 计算机学院优秀主讲教师评选细则,徐州工程学院优秀主讲教师评选办法 徐工院行教[2015]35号...
- 【特征选择】过滤式特征选择法
- 【bzoj4084】[Sdoi2015]bigyration hash
- php织梦网站如何设置头,织梦dedecms网站的安全设置教程
- 个人发卡网源码搭建教程
热门文章
- 神经网络下采样、上采样——图文计算
- [转载]Win 7 OS: ReadyFor4G使用方法
- C++ 比赛时 无穷小、无穷大的设定
- 瓜瓜选妃 (二维差分 前缀 二分
- 【编译原理】手工构造词法分析器
- iis服务器的 字体文件, 提示文件或目录不存在,找不到文件
- tensorflow2图像分类实战激活函数selu
- LeetCode——765. 情侣牵手(Couples Holding Hands)——分析及代码(Java)
- QQ开始支持离线传文件
- 格兰杰因果检验_Python实现