Tôi đã tự hỏi nếu nó có thể tìm thấy giá trị trung bình của một mảng? Ví dụ, giả sử tôi có một mảng có kích thước chín. Nó có thể tìm thấy khe giữa của mảng này?Tìm giá trị trung bình của một mảng?
Trả lời
Giả sử các mảng x được sắp xếp và có chiều dài n:
Nếu n là số lẻ thì trung bình là x [(n-1)/2].
Nếu n thậm chí là trung bình là (x [n/2] + x [(n/2) -1])/2.
Điều này sẽ mất thời gian o (nlogn) ít nhất. – VishAmdi
vector<int> v;
size_t len = v.size;
nth_element(v.begin(), v.begin()+len/2,v.end());
int median = v[len/2];
Trong java:
int middleSlot = youArray.length/2;
yourArray[middleSlot];
hoặc
yourArray[yourArray.length/2];
trong một dòng.
Điều đó có thể vì trong mảng java có kích thước cố định.
Lưu ý:3/2 == 1
Resources:
Trong C++, bạn có thể sử dụng std::nth_element
; xem http://cplusplus.com/reference/algorithm/nth_element/.
Câu trả lời Java ở trên chỉ hoạt động nếu có một số tiền lẻ số ở đây là câu trả lời tôi nhận được cho giải pháp:
if (yourArray.length % 2 == 0){
//this is for if your array has an even ammount of numbers
double middleNumOne = yourArray[yourArray.length/2 - 0.5]
double middleNumTwo = yourArray[yourArray.length/2 + 0.5]
double median = (middleNumOne + middleNumTwo)/2;
System.out.print(median);
}else{
//this is for if your array has an odd ammount of numbers
System.out.print(yourArray[yourArray.length/2];);
}
Và lưu ý rằng đây là bằng chứng về khái niệm và tắt. Nếu bạn nghĩ rằng bạn có thể làm cho nó nhỏ gọn hơn hoặc ít chuyên sâu hơn, hãy tiến lên phía trước. Xin đừng chỉ trích nó.
Nếu bạn muốn sử dụng bất kỳ thư viện bên ngoài nào tại đây là Apache commons math library sử dụng, bạn có thể tính toán Median.
Đối với phương pháp hơn và sử dụng take nhìn vào API documentation
import org.apache.commons.math3.*;
.....
......
........
//calculate median
public double getMedian(double[] values){
Median median = new Median();
double medianValue = median.evaluate(values);
return medianValue;
}
.......
- Để biết thêm về đánh giá phương pháp AbstractUnivariateStatistic#evaluate
Tính trong chương trình
Nói chung, trung bình được tính bằng cách sử dụng sau đây hai công thức given here
Nếu n là số lẻ thì giá trị trung bình (M) = giá trị của ((n + 1)/2) mục thứ.
Nếu n là thậm chí sau đó trung bình (M) = giá trị của [((n)/2) hạn mục thứ + ((n)/2 + 1) hạn mục thứ]/2
Nó rất dễ dàng như bạn có 9 yếu tố (số lẻ).
Tìm phần tử trung gian của một mảng.
Trong chương trình của bạn, bạn có thể khai báo mảng
//as you mentioned in question, you have array with 9 elements
int[] numArray = new int[9];
thì bạn cần phải sắp xếp mảng sử dụng Arrays#sort
Arrays.sort(numArray);
int middle = numArray.length/2;
int medianValue = 0; //declare variable
if (numArray.length%2 == 1)
medianValue = numArray[middle];
else
medianValue = (numArray[middle-1] + numArray[middle])/2;
Có thay thế khác - nói chung, những gợi ý ở đây, hoặc đề nghị phân loại các mảng sau đó lấy trung bình từ một mảng như vậy hoặc dựa vào giải pháp thư viện (bên ngoài). Các thuật toán sắp xếp nhanh nhất hiện nay là linearithmic, nhưng có thể làm tốt hơn các thuật toán tính trung bình.
Thuật toán nhanh nhất để tính trung bình từ một mảng chưa được phân loại là QuickSelect, trong đó, trung bình, tìm số trung bình theo tỷ lệ thời gian với O (N). Thuật toán lấy mảng làm đối số, cùng với giá trị int k
(thống kê đơn hàng, tức là phần tử nhỏ nhất thứ k trong mảng). Giá trị của k
, trong trường hợp này, chỉ đơn giản là N/2, trong đó N là chiều dài mảng.
Thực hiện hơi khó để có được quyền nhưng đây là một ví dụ dựa trên giao diện Comparable<T>
và Collections.shuffle()
mà không có bất kỳ phụ thuộc bên ngoài nào.
public final class QuickSelectExample {
public static <T extends Comparable<? super T>> T select(T[] a, int k) {
if (k < 1) throw new IllegalStateException("Invalid k - must be in [1, inputLength].");
if (k > a.length) throw new IllegalStateException("K-th element exceeds array length.");
Collections.shuffle(Arrays.asList(a));
return find(a, 0, a.length - 1, k - 1);
}
private static <T extends Comparable<? super T>> T find(T[] a, int lo, int hi, int k) {
int mid = partition(a, lo, hi);
if (k == mid) return a[k];
else if (k < mid) return find(a, lo, mid - 1, k); // search left subarray
else if (k > mid) return find(a, mid + 1, hi, k); // search right subarray
else throw new IllegalStateException("Not found");
}
private static <T extends Comparable<? super T>> int partition(T[] a, int lo, int hi) {
T pivot = a[lo];
int i = lo + 1;
int j = hi;
while (true) { // phase 1
while (i <= hi && (less(a[i], pivot) || eq(a[i], pivot))) // is a[i] >= pivot?
i++;
while (j >= i && !less(a[j], pivot)) // is a[j] <= pivot?
j--;
if (i >= j) break;
exch(a, i, j);
}
exch(a, lo, j); // phase 2
return j;
}
private static <T extends Comparable<? super T>> boolean less(T x, T y) {
return x.compareTo(y) < 0;
}
private static <T extends Comparable<? super T>> boolean eq(T x, T y) {
return x.compareTo(y) == 0;
}
}
Mã này tạo ra số liệu thống kê theo thứ tự sau đây cho các mảng đầu vào:
" Input Array | Actual Output [format: (index k -> array element)] ", //
" | ", //
" [S, O, R, T, E, X, A, M, P, L, E] | [(1 -> A), (2 -> E), (3 -> E), (4 -> L), (5 -> M), (6 -> O), (7 -> P), (8 -> R), (9 -> S), (10 -> T), (11 -> X)] ", //
" [P, A, B, X, W, P, P, V, P, D, P, C, Y, Z] | [(1 -> A), (2 -> B), (3 -> C), (4 -> D), (5 -> P), (6 -> P), (7 -> P), (8 -> P), (9 -> P), (10 -> V), (11 -> W), (12 -> X), (13 -> Y), (14 -> Z)] " //
Do nó trong một dòng giống như một pro:
return (arr[size/2] + arr[(size-1)/2])/2;
cast đến một double
nếu bạn mong đợi một số double
, v.v.
- 1. Tìm giá trị trung bình của mảng chưa phân loại
- 2. thay zero trong mảng NumPy với giá trị trung bình
- 3. Python- Cách tìm giá trị trung bình của nhiều giá trị/khóa trong từ điển
- 4. Làm thế nào để tìm thấy một ngày trung bình/giờ trong mảng của DateTime giá trị
- 5. SQLite - cách lấy giá trị trung bình?
- 6. Tìm mức cao nhất, thấp nhất, tổng, trung bình và trung bình từ một mảng trong Ruby
- 7. Cách tính giá trị màu rgb trung bình của bitmap
- 8. Tìm giá trị bất thường trong một mảng, liệt kê
- 9. Tìm n giá trị nhỏ nhất trong một mảng
- 10. gần nhất với giá trị trung bình SQL
- 11. Python: Tìm trung bình của một danh sách lồng nhau
- 12. Truy vấn MySQL: Cách tính trung bình của các giá trị trong một hàng?
- 13. cách tính và sử dụng giá trị trung bình cvMat
- 14. TSQL - Trung bình của tất cả các giá trị trong một cột không phải là số
- 15. Tìm số trung bình của các số sử dụng MapReduce
- 16. Giá trị trung bình của tập dữ liệu điểm cho một tập dữ liệu lưới
- 17. Tìm vị trí của một giá trị trong mảng PostgreSQL
- 18. Làm cách nào để tính giá trị trung bình của một cột
- 19. Cách lấy giá trị trung bình của một hàng ma trận trong Octave?
- 20. thêm giá trị trung bình vào biểu đồ trong R!
- 21. Cách tìm giá trị trung bình trong cột ngày trong SQL Server
- 22. Tìm giá trị tối thiểu, tối đa và trung bình cho các danh sách lồng nhau?
- 23. việc tìm kiếm các trung bình của 5 yếu tố
- 24. Tính trung bình trong Ruby
- 25. Làm cách nào để tính giá trị trung bình trong các đối tượng nằm trong một mảng?
- 26. Mảng đơn giản (di chuyển trung bình) trong C#
- 27. Pandas: Sắp xếp các cột theo giá trị trung bình của chúng
- 28. Tính trung bình trên mọi phần tử n của một mảng có nhiều mảng
- 29. Tìm chỉ mục của một danh sách giá trị trong một mảng có nhiều mảng
- 30. cách tính trung bình từ mảng int2 sử dụng Thrust
Điều đó sẽ khá tầm thường nếu bạn biết gì về xử lý mảng. Lưu ý rằng trừ khi mảng được sắp xếp, vị trí giữa không phải là trung vị. Đây có phải là bài tập về nhà không? – teukkam
Java hoặc C++? Chọn một. Và "giá trị trung bình" và "khe giữa" không giống nhau, hãy chọn một. – GManNickG