Форум программистов, компьютерный форум CyberForum.ru

Найти моду в массиве - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано число A (>1). Вывести найбольшее из целых чисел К, для которых сумма 1+1/2 http://www.cyberforum.ru/cpp-beginners/thread621734.html
Дано число A (>1). Вывести найбольшее из целых чисел К, для которых сумма 1+1/2+...+1/k будет меньше А и саму эту сумму.
C++ Оценка 4-ой произвоной на отрезке подскажите идею(желательно с реализацией) как можно найти максимум 4-ой производной функции на отрезке или хотя бы предъявить оценку сверху, заранее спс. http://www.cyberforum.ru/cpp-beginners/thread621721.html
C++ Описать функцию RadToDeg(R)
Помогите мне с задачкой:Описать функцию RadToDeg(R) вещественного типа, находящую величину угла в градусах, если дана его величина R в радианах (R — вещественное число, 0 < R < 2·p). Воспользоваться следующим соотношением: 180° = p радианов. В качестве значения p использовать 3.14. С помощью функции RadToDeg перевести из радианов в градусы пять данных углов.
Вывести на экран сумму, чисел делящихся на 2ссива C++
Помагите пожалуйста срочно нужна помощь создать массив из 15 случайных чисел и вывести сумму на экран чисел делящихся на 2
C++ Вывести на экран первые 10 четных элементов массива http://www.cyberforum.ru/cpp-beginners/thread621670.html
Помагите пожалуйста срочно нужна помощь вывести на экран первый 10 четных элементов массива
C++ Описать процедуру ArrayToMatrRow Помогите,пожайлуста, в решении одной задачи: Описать процедуру ArrayToMatrRow(A, K, M, N, B), формирующую по вещественному массиву A размера K матрицу B размера M ґ N (матрица заполняется элементами массива A по строкам). «Лишние» элементы массива игнорируются; если элементов массива недостаточно, то оставшиеся элементы матрицы полагаются равными 0. Двумерный массив B является выходным... подробнее

Показать сообщение отдельно
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
10.07.2012, 21:25     Найти моду в массиве
В задаче не указан максимальный размер массива (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. Оба кода моду ищут правильно, только мой - для наименьшего числа массива, а предложенный по ссылке - первого из нескольких.
 
Текущее время: 14:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru