我想修改QuickSort (在Java语言中),这样每次调用Partition时,比例数组的中位数就被用作轴心。
我在Java中有一个中值选择算法,它返回第k个最小的元素,在本例中是中值。我在java中有大量的快速排序算法,它们都是独立工作的,并对一个数组进行排序。不幸的是,我无法将这两者结合起来以实现上述目标……每次我尝试它的时候,我通常会得到堆栈溢出错误。
有没有人能给我看一下代码,看看是怎么做的?
谢谢
编辑:例如,这是我尝试使用的中值选择算法。
public int quickSelect(int[] A, int p, int r, int k) {
if (p==r) r
作为家庭作业,我被分配写一个算法,从无序的数字集中找到第k个有序的数字。作为一种方法,提出了median of medians算法。
不幸的是,我的尝试失败了。如果有人发现了错误,请纠正我。
private int find(int[] A, int size, int k) {
if (size <= 10) {
sort(A, 0, size);
return A[k];
} else {
int[] M = new int[size/5];
for (int i = 0; i < size / 5
我必须编写一个快速排序算法,它使用数组的中位数作为轴心。根据我从书中读到的一般理解,我必须使用select算法,在该算法中,我将数组拆分为n/5个子数组,使用插入排序对每个子数组进行排序,找到中位数,然后递归调用select算法来找到中位数的中位数。我甚至不知道如何开始,而且我很困惑。selectMedian算法调用应该看起来像这样:SelectMedian(int first, int last, int i),其中i是我想要选择的第i个索引(在本例中它是中间的索引,所以是array.length/2)。我正在读的这本书对它有这样的描述:
The algorithm in words (if
已经有两个排序数组的。然而,在我的问题中,其中一个数组是未排序的。
假设X[1..n]和Y[1..m]其中n < m。X是排序的,而Y是未排序的。求第k个最小X U Y数的有效算法是什么?
MinHeap可用于查找未排序数组中的第k个最小值。但是,这里对其中一个数组进行了排序。我能想到:
1. Building a `MinHeap` for `Y`
2. i = 1, j = 1
3. x1 = extract Min from Y
4. x2 = X[i];
5. if j == k: return min(x1, x2)
5. if x1 < x2: j++;
关于这一算法:
Algo(A, p, r)
if p ≤ r then
q ← Partition(A,p,r)
if q == r then
return A[q]
else
return Algo(A,q+1,r)
end
end
而分区是:
Partition(A,p,r)
x=A[r]; j=r; i=p-1;
While true
repeat j ← j - 1
until A[j]<x
repeat i ← i +1
until A[i] >= x
if i<j
then A[i] ←
我试图通过从projecteuler.net中解决问题来学习python。我一直在努力解决第62号问题,但我找不到哪里出错了。因此,问题是:
The cube, 41063625 (345^3), can be permuted to produce two other cubes: 56623104 (384^3) and 66430125 (405^3).
In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube.
Find t
我有一个列表,list_a,它包含浮点数:
list_a = [[[ 0 for i in range(40)] for j in range(1000)]for k in range(47)]
我有一个排序后的版本:
list_a_sorted = list_a
list_a_sorted[0].sort()
因此,对list_a_sorted进行排序,并包含从最低的值开始的list_a的值。让我们假设它如下:
[2.3,3.1.........9]
所以2.3是最低值,但是我怎么知道这是list_a中的第8个元素,还是第15个或第n个元素呢?
因为我的列表很大,所以我也需要尽可能高效地做这
所以我对C++还是很陌生的,并且已经做了一段时间的程序了。我想我正在慢慢地得到它,但是不断地得到一个错误"Intellisense:'*‘的操作数必须是一个指针。“在第36行第10栏,我需要做些什么来修复这个错误?当我完成每个函数时,我将进入其他函数,对于额外的函数声明非常抱歉
// This program will take input from the user and calculate the
// average, median, and mode of the number of movies students see in a month.
#include
我试着在Hackerrank中解决一个问题。我通过了所有样本测试用例,但由于“超过时间限制”错误,无法通过所有隐藏的测试用例。这个问题的链接是:Fraudulent-activity notification 我的代码如下。 #include <bits/stdc++.h>
using namespace std;
vector<string> split_string(string);
// Complete the activityNotifications function below.
int activityNotifications(vector&l
我需要找到一个双精度数组的中值(在Java中),而不需要修改它(所以没有选择),也不需要分配大量的新内存。我也不关心找到确切的中位数,但在10%以内就可以了(所以如果中位数将排序后的数组拆分40%-60%就可以了)。
我如何才能有效地实现这一点?
考虑到rfreak,ILMTitan和Peter的建议,我写了这段代码:
public static double median(double[] array) {
final int smallArraySize = 5000;
final int bigArraySize = 100000;
if (array.lengt
我希望有人能帮我完成这项任务。所以我们得到了我的教授的C++算法:
template<class T> //Parameterized by the Type T
void insertion_sort(array<T>& A) //A is an array of Ts
//Permutes the elements of A into ascending sorted order
//The lower index bound of A is assumed to be 1
{ int n = A.size();
for(int k=2; k<=n
假设我有一个大小为n的未排序数组A。
如何在线性时间内从原始未排序列表中求出n/2,n/2−1,n/2+1最小元素?
我尝试在中使用选择算法(基于分区的通用选择算法是我正在实现的)。
function partition(list, left, right, pivotIndex)
pivotValue := list[pivotIndex]
swap list[pivotIndex] and list[right] // Move pivot to end
storeIndex := left
for i from left to right-1
if list[i]
我这里有一个问题,它需要为以下三个操作设计一个最坏情况为O(lg n)的数据结构:
a) Insertion: Insert the key into data structure only if it is not already there.
b) Deletion: delete the key if it is there!
c) Find kth smallest : find the ݇k-th smallest key in the data structure
我想知道我是否应该使用堆,但我仍然不清楚它。
我可以很容易地得到O(lg )的前两部分,甚至更快,但不确定
我有一个二维数组,但是我能找到存储在数组中的某个元素的列索引吗?
假设我要查找的元素存储在第2行,但我不知道它的列索引。但是如何找到列索引呢?
例如,我有一个二维数组和一个元素列表,
L = (A B C)
我知道"A“存储在数组中的第2行,现在我想在数组中找到"A”的列索引,所以我尝试
(eval (first L))
但是给出了错误消息
The variable A is unbound.
谢谢。
我发现numpy的第50个百分位数并不能反映出一个完美的平均值。为什么会这样呢?按照定义,第50百分位数应该是平均数。
In [1]: s = [1.3424,4.221124,5.11,2.4432]
In [2]: sum(s)/len(s)
Out[2]: 3.2791810000000003
In [3]: np.percentile(s,50)
Out[3]: 3.3321619999999998
In [15]: s = [1.3424,4.221124,5.11,2.4432]
In [4]: sum(s)/len(s)
Out[4]: 3.2791810000000003
我有一个由N个元素组成的未排序向量,并希望找到K个最小或最大的元素。K应该是K << N远小于N,但算法应该是健壮的,以便对较大的K值也是有效的,例如N的50-80%。
沿着重用Quicksort的思路思考,将意味着准确地使用第k个最小/最大元素作为轴心进行分区。但是找到第k个最小/最大值已经在计算OP的解了。
以下是快速排序的分区位:
template<typename T>
int partition(std::vector<T>& arr, int low, int high, T pivot) {
int i = (low - 1);
我正在尝试编写一段代码,返回向量中的第k个最小元素。例如:假设你有一个向量rand,它包含元素{0,3,2,5},用户输入2作为K的值。然后,函数应该返回向量中的元素2,因为它是向量中第二个(第k个)最小的元素。
到目前为止,这是我的代码:
int iterative_kth_element(vector<int>& vec, size_t k)
{
int index = 0;
int min = vec[0];
for(int i = k;i<vec.size();i--) {
for (int j = 1; j
这取自TopCoder的算法页面“RMQ的简单算法”一节,据说这是一个用于在A数组上计算RMQ的预处理函数。
void process1(int M[MAXN][MAXN], int A[MAXN], int N)
{
int i, j;
for (i =0; i < N; i++)
M[i][i] = i;
for (i = 0; i < N; i++)
for (j = i + 1; j < N; j++)
if (A[M[i][j - 1]] < A[