中位数的中位数

2024-06-13 23:18
文章标签 中位数

本文主要是介绍中位数的中位数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">参照王晓东的算法设计</span>

中位数的中位数,即将一串数分成n段,求其排好序了的中间那个数,再把这些所有中位数再求一次中位数。


for(int i = 0; i <= (r-p-4)/5; i++){	quickSort(a, p+5*i, p+5*i+4); 	//将a[p+5*i]至a[p+5*i+4]的第3小元素与a[p+i]交换位置 Swap(a[p+5*i+2],a[p+i]);  }//找中位数的中位数,r-p-4即上面所说的n-5 int x = lineSelect(a,p,p+(r-p-4)/5,(r-p-4)/10);


线性查找第k小的数的核心代码

//按中位数的中位数x划分,并返回x的下标 
int partition(int a[],int p,int r,int x)  
{  int i = p,j = r + 1;  while(true)  {  while(a[++i]<x && i<r);  while(a[--j]>x);  if(i>=j)  {  break;  }  Swap(a[i],a[j]);  }     return j;  
}  int lineSelect(int * a,int p, int r, int k)
{if(r - p < 75){//排序quickSort(a, p, r);  return a[p+k-1]; }for(int i = 0; i <= (r-p-4)/5; i++){	quickSort(a, p+5*i, p+5*i+4); 	//将a[p+5*i]至a[p+5*i+4]的第3小元素与a[p+i]交换位置 Swap(a[p+5*i+2],a[p+i]);  }//找中位数的中位数,r-p-4即上面所说的n-5 int x = lineSelect(a,p,p+(r-p-4)/5,(r-p-4)/10);int i = partition(a,p,r,x);int j = i - p + 1;if(k <= j)return lineSelect(a,p,i,k);elsereturn lineSelect(a,i+1,r,k-j);
}



这篇关于中位数的中位数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058707

相关文章

【SGU】 114. Telecasting station 中位数

传送门:【SGU】 114. Telecasting station 题目分析:一个位置多个城市可以看成多个城市在同一位置,然后就可以求中位数了,易知最优的位置一定在中位数上。 代码如下 : #include <map>#include <vector>#include <cstdio>#include <cstring>#include <iostream>

算法/编程练习:两个有序数组的中位数

算法/编程练习:两个有序数组的中位数 题目来自LeetCode: https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 题目: 给定两个大小为 n1 和 n2 的有序(升序)数组 nums1 和 nums2 ,找出这两个有序数组的中位数mid。要求算法的时间复杂度为 O(log(m + n))。例如,输入: nu

SQL进阶技巧:给定数字的频率查询中位数 | 中位值计算问题

目录 0 需求描述 1 数据准备 2 问题分析 方法1:按照频率将num值展开,转换成明细表,利用中位值公式 求解      abs(rn - (cnt+1)/2) < 1  方法2:中位值定义 3 小结 0 需求描述 num表: Column NameTypenumintfrequencyint num 是这张表的主键(具有唯一值的列)。这张表的每一行表示某个数字

算法--------------------寻找两个有序数组的中位数

题目描述 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/

leetcode 4:两个排序数组的中位数

寻找中位数,当m+n是奇数时,中位数为第(m+n+1)/2个数,当m+n为偶数时,中位数为第(m+n+1)/2和(m+n+2)/2的平均数 根据整数的取整,我们可以统一为中位数为第(m+n+1)/2和(m+n+2)/2的平均数。 如何使用二分法求两个有序数组的第k个数 首先将数组A和数组B分为left_A(下标为0~k/2-1),right_A,left_B(下标为0~k/2-1),ri

NumPy(五):数组统计【平均值:mean()、最大值:max()、最小值:min()、标准差:std()、方差:var()、中位数:median()】【axis=0:按列运算;axis=0:按列】

统计运算 np.max()np.min()np.median()np.mean()np.std()np.var()np.argmax(axis=) — 最大元素对应的下标np.argmin(axis=) — 最小元素对应的下标 NumPy提供了一个N维数组类型ndarray,它描述了 相同类型 的“items”的集合。(NumPy provides an N-dimensional array

opencv中求图像像素值中位数

话不多说,直接上源码: int GetMidValue(Mat& input){int rows = input.rows;int cols = input.cols;float histogram[256] = { 0 };//先计算图像的直方图for (int i = 0; i < rows; ++i){///获取i行首像素的指针const uchar *p = input.ptr<uch

查找有序二维数组的中位数

题目:给定 n×n 的实数矩阵,每行和每列都是递增的,求这 n^2 个数的中位数 代码如下: package com.cb.java.algorithms.programmingmethod.search;/*** 给定 n×n 的实数矩阵,每行和每列都是递增的,求这 n^2 个数的中位数* * @author 36184**/public class SearchMedian {/***

第四题:求两个有序数组的中位数(Median of Two Sorted Arrays)

题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2,请你找出这两个有序数组的中位数。 示例: 输入:nums1 = [1, 3], nums2 = [2] 输出:2.0 输入:nums1 = [1, 2], nums2 = [3, 4] 输出:2.5 要求: 你必须在对数时间复杂度 O(log(min(m, n))) 内解决这个问题。 解题思路 二分

排序算法刷题【leetcode:04题,寻找两个正序数组的中位数。leetcode:219题,存在重复的元素 】

代码如下所示: #include <iostream>#include <vector>#include <algorithm>using namespace std;/* leetcode04题:寻找两个正序数组的中位数 */class Solution {public:double findMedianSortedArrays(vector<int>& nums1, vec