В задаче не указан максимальный размер массива (m) и не указано, какие значения могут принимать элементы массива . Предположим, что речь идёт массиве натуральных чисел, максимальное из которых n<32768.
запустите программу и посмотрите сколько времени занимает поиск моды в моём варианте, и в предложенной ссылке
Мода массива для массива из 30000 элементов (я объединил оба кода)
А, скажем, для 100000 элементов... не дождётесь второго результата (а мой - почти мгновенно).
Вот поэтому я и спрашивал, каков размер массива () и каково максимальное значение его элементов.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| //moda
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(time(NULL));
setlocale (0,"");
//СОЗДАНИЕ МАССИВА
int m=30000, // размер массива
n=10, // максимальное значение элемента массива (n<32768)
rmax; // мода
int *a = new int[m];
for (int i=0; i<m; i++)
a[i]= rand() % (n+1);
//ВЫВОД МАССИВА
//for (int i=0; i<m; i++)
//cout << a[i]<< " ";
//cout << endl;
cout << "массив из " << m << " элементов создан,\n\n\n\n";
//мой вариант
cout << "идёт проверка предложенным мною способом\n\n";
int b[32768] ={0};
for (int i=0; i<m; i++)
b[a[i]]++;
rmax=b[0];
int I=0;
for (int i=0; i<n; i++)
if (b[i]>rmax)
{
rmax=b[i];
I=i;
}
cout << "элемент " << I
<< "\nвстречается наибольшее количество: "
<< rmax << " раз\n\n\n\n" <<endl;
//предложенный вариант
cout <<"идёт проверка предложенным Inadequate способом\n" ;
rmax = 0;
int max = a[0], cmax = 0;
for (int i = 0; i < m; i++)
{
if (cmax > rmax)
{
rmax = cmax;
max = a[i - 1];
}
cmax = 0;
for (int j = i; j < m; j++)
if (a[j] == a[i])
cmax++;
}
cout << "элемент " << max
<< "\nвстречается наибольшее количество: "
<< rmax << " раз\n\n\n\n" <<endl;
system ("pause");
} |
|
P.S. Оба кода моду ищут правильно, только мой - для наименьшего числа массива, а предложенный по ссылке - первого из нескольких.