Como calcular a MODA (estatística)

Alguém sabe, por favor, qual função devo usar (e se ela existe) pra calcular a moda em um conjunto de números?
Estou guardando os números em um int[];

só pra lembrar:

A moda é o valor mais freqüente em um conjunto de valores numéricos. A moda pode não existir e, mesmo que exista, pode não ser única. Exemplos:
1,1,3,3,5,7,7,7,11,13 tem moda 7
3,5,8,11,13,18 não tem moda
3,5,5,5,6,6,7,7,7,11,12 tem duas modas: 5,7 (bimodal).

obrigado
[]'s

Artur Sampaio

Olá,

Deve até ter, mas isso é um algoritmo bem simples… qual exatamente a sua dificuldade?

sim… sem dúvida q o algoritmo é simples.
O fato é q se a linguagem já disponibilizar alguma função pra isso, prefiro utilizá-la do que escrever novamente, sacow?

vlw
[]'s
Artur Sampaio

tem varias maneiras de resolver isso…
bota a cabeça pra pensar…
uma maneira pra fazer isso eh vc colocar os valores num array. Tipo:
elemento[i] = n
onde “i” eh o numero que vai se repetir e “n” eh o numero de vezes q ele se repete.

falou

Olá!

Respondendo sua pergunta, não há uma função pronta na API do Java para este problema.

Mas, como já disseram, é um problema simples de ser resolvido. Se tiver dificuldades quanto ao algoritmo (depois de tentar bastante) pode recorrer ao guj :smiley:

edit: generalizar geralmente é um erro :smiley:

Dá uma olhada em http://jakarta.apache.org/commons/math

De repente tem o q vc precisa.

bem eu to com a mesma duvida q ele acima…de como calcular a moda em java, tenho um trabalho a ser terminado, pede estatisticas como a moda, mediana, media, maior numero, menor numero e primeiro valor…

pra mim so falta terminar a moda…talvez a resposta de pra minha duvida ,seja equivalente a do inicio do forumm, calculo de moda…
bem deixo o q ja fiz em anexo para todos verem, tanto o main qt o construtores…
no aguardo, abracos.

Eu desenvolvi o algoritmo do calculo da moda. É o seguinte.

    public int moda() {
        int[] cont = new int[CPD.controladora + 1];
        int vezes = 0;
        int indice = 0;
        for (int i=0; i < (CPD.controladora + 1); i++) {
            for (int j=0;j < (CPD.controladora + 1); j++) {
                if(vet[i] == vet[j]) {
                    cont[i] = cont[i] + 1;
                }
            }
        }
        vezes = cont[0];
        for (int i=0; i < cont.length; i++) {
            if (cont[i] > vezes) {
                vezes = cont[i];
                indice = i;
            }
        }
        return vet[indice];
    }

Explicando:
A moda nesse caso retorna o numero que mais se repete dentro de um vetor.
a variável static CPD.controladora controla os valores que foram inseridos pelo usuário, ou seja, controla o indice do último valor inserido pelo usuário, pq se raciocinarmos, só podemos criar estatísticas em cima de valores que foram atribuídos no vetor pelo usuário, e nao deixar o vetor com apenas os valores default, nesse caso, seria 0.
O vetor de inteiros tem a referência vet, que é o vetor que está sendo manipulado nesta estatística!
Qualquer dúvida sobre o algoritmo, ou sobre estatísticas matemáticas mande em email para, leandro.storoli@gmail.com

Valew pessoal!

Podemos até recorrer para coleções do Java, mas somente para auxiliar.
Neste caso como a dúvida presume-se em um trabalho acadêmico, então melhor entender o que é feito e tentar desenvolver!!!

//Calculo da Moda public int moda(){ int nVezes = 0; int moda = 0; int comparaV = 0; for(int p = 0; p < this.v.getV().length; p++){ nVezes = 0; for(int k = p+1; k < this.v.getV().length; k++){ if( this.v.getV(p).getN() == this.v.getV(k).getN() ){ ++nVezes; } } if (nVezes > comparaV ){ moda = this.v.getV(p).getN(); comparaV = nVezes; } } return moda; }

leandros gostei muito da sua explicação, mais se ao invés de o usuário ter que inserir, como ficaria se eu tivesse uma coleção de dados em um servidor e quisesse trata-los utilizando a mode e a mediana?