इस समस्या में, हमें आकार n की एक सरणी arr[] और एक पूर्णांक m दिया गया है। हमारा कार्य दी गई सरणी में उप-सरणी माध्यिकाओं का माध्य ज्ञात करना है।
कोड विवरण - यहाँ, हमें सरणी के माध्य को आकार m की उप-सरणी के माध्यिकाओं के माध्य के रूप में खोजना है।
आइए एक उदाहरण से समझते हैं:
इनपुट
arr[] = {2, 5, 3, 6, 1}, m = 3आउटपुट
3.78
व्याख्या
आकार m की सभी उप-सरणियाँ हैं {2, 5, 3}, {5, 3, 6}, {3, 6, 1} उप-सरणी के माध्यिकाओं का माध्य,$$(\left(\frac{2+5+3}{3}\right)+\left(\frac{5+3+6}{3}\right)+\left(\frac{3+6+1}{3}\right))/3=\left(\frac{10}{3}\right)+\left(\frac{14}{3}\right)+\left(\frac{10}{3}\right)/3=34/3/3=3.78$$
समाधान दृष्टिकोण
समस्या का एक सरल समाधान आकार m की सभी उप-सरणियाँ खोजना और उनके माध्यिकाओं की गणना करना है। फिर इन सभी माध्यिकाओं को जोड़ें और उप-सरणियों की संख्या से विभाजित करें। और परिणाम लौटाएँ।
एक अधिक कुशल दृष्टिकोण स्लाइडिंग विंडो एल्गोरिदम का उपयोग करना है। हम इंडेक्स 0 से शुरू होने वाली आकार m की विंडो खोजेंगे। प्रत्येक विंडो के लिए माध्य और योग खोजें। और अंत में योग को विंडो की संख्या से विभाजित करें और मान लौटाएँ।
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम:
उदाहरण
#include <iostream> using namespace std; float calcMeanOfSubarrayMeans(int arr[], int n, int m) { float meanSum = 0, windowSum = 0; for (int i = 0; i < m; i++) windowSum += arr[i]; meanSum += (windowSum / m); for (int i = 0; i < n; i++) { windowSum = windowSum - arr[i - m] + arr[i]; meanSum += (windowSum / m); } int windowCount = n - m + 1; return (meanSum / windowCount); } int main() { int arr[] = { 4, 1, 7, 9, 2, 5, 3}; int n = sizeof(arr) / sizeof(arr[0]); int m = 3; cout<<"The mean of subarray means is "<<calcMeanOfSubarrayMeans(arr, n, m); return 0; }आउटपुट
The mean of subarray means is 8.06667