多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 随机对为最大加权对的概率 > 原文: [https://www.geeksforgeeks.org/probability-random-pair-maximum-weighted-pair/](https://www.geeksforgeeks.org/probability-random-pair-maximum-weighted-pair/) 给定两个数组 A 和 B,从数组 A 中选择一个元素,数组 B 中另一个元素,从中选取一个随机对。输出该对被最大加权的概率。 **示例**: ``` Input : A[] = 1 2 3 B[] = 1 3 3 Output : 0.222 Explanation : Possible pairs are : {1, 1}, {1, 3}, {1, 3}, {2, 1}, {2, 3}, {2, 3}, {3, 1}, {3, 3}, {3, 3} i.e. 9. The pair with maximum weight is {3, 3} with frequency 2\. So, the probability of random pair being maximum is 2/9 = 0.2222. ``` **暴力法**:以 N ^ 2 的时间复杂度生成所有可能的对,并计算 最大加权对。 **更好的方法**:对两个数组都进行排序,并对 A 和 B 中的最后一个(最大)元素进行计数。最大加权对的数量将是这两个计数的乘积。 概率将为 (计数的乘积)/ sizeof(A)* sizeof(B) **最佳方法**最佳方法将是遍历两个数组并计算最大元素。 最大加权对的数量将是两个计数的乘积。 概率将是(计数的乘积)/ sizeof(A)* sizeof(B) 下面是实现: ## C++ ```cpp #include <bits/stdc++.h> using namespace std; // Function to return probability double probability(int a[], int b[], int size1,                                       int size2) {     // Count occurrences of maximum element      // in A[]     int max1 = INT_MIN,  count1 = 0;     for (int i = 0; i < size1; i++) {         if (a[i] > max1) {             max1 = a[i];             count1 = 1;         }         else if (a[i] == max1) {             count1++;         }     }     // Count occurrences of maximum element      // in B[]     int max2 = INT_MIN, count2 = 0;     for (int i = 0; i < size2; i++) {         if (b[i] > max2) {             max2 = b[i];             count2 = 1;         }         else if (b[i] == max2) {             count2++;         }     }     // Returning probability     return (double)(count1 * count2) /                    (size1 * size2); } // Driver code int main() {     int a[] = { 1, 2, 3 };     int b[] = { 1, 3, 3 };     int size1 = sizeof(a) / sizeof(a[0]);     int size2 = sizeof(b) / sizeof(b[0]);     cout << probability(a, b, size1, size2);     return 0; } ```