इस समस्या में, हमें n आकार का एक सरणी arr[] और एक पूर्णांक m दिया जाता है। हमारा कार्य किसी दिए गए सरणी में सबअरे का माध्य ज्ञात करना है।
कोड विवरण - यहां, हमें सरणी के माध्य को आकार m के उप-सरणी के माध्य के रूप में खोजने की आवश्यकता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
arr[] = {2, 5, 3, 6, 1}, m = 3
आउटपुट
3.78
स्पष्टीकरण
All subarrays of size m are {2, 5, 3}, {5, 3, 6}, {3, 6, 1} Means of means of subarray of size m,
$$(\बाएं(\frac{2+5+3}{3}\right)+\left(\frac{5+3+6}{3}\right)+\left(\frac{3+6 +1}{3}\दाएं))/3=\बाएं(\frac{10}{3}\दाएं)+\बाएं(\frac{14}{3}\दाएं)+\बाएं(\frac{10 }{3}\दाएं)/3=34/3/3=3.78$$
समाधान दृष्टिकोण
समस्या का एक सरल समाधान m आकार के सभी उप-सरणियों को खोजना और उनके साधनों को खोजना है। फिर इन सभी साधनों को जोड़ें और इसे उप-सरणियों की संख्या से विभाजित करें। और परिणाम लौटाएं।
स्लाइडिंग विंडो एल्गोरिदम का उपयोग करके एक और अधिक कुशल दृष्टिकोण है। हम इंडेक्स 0 से शुरू होने वाले आकार एम की खोज पाएंगे। प्रत्येक विंडो के लिए माध्य और योग खोजें। और अंत में योग को विंडो काउंट से विभाजित करें और मान वापस करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#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