Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Алгоритмы] Ранжирование массива чисел


Автор: AndreyKO 23.9.2006, 14:03
Помогите пожалуйста! горю...
Необходимо проранжировать ряд чисел (массив):
Меньшему значению начисляется ранг 1.
Наибольшему значению начисляется ранг равный количеству чисел в массиве.
Если несколько значений массива равны,им начисляется ранг равный среднему значению тех рангов, которые они получили бы, если бы не были равны.
____________________________________________________________________________________

++++++++ У кого какие соображения+++++++++++++++++++++++++++++++++++++++++++++++
Может кто сталкивался с этой лабудой...

Автор: Kuvaldis 23.9.2006, 14:20
AndreyKO
1. 
Цитата

Название темы должно отображать суть проблемы

2. С просьбой о написании программ - в Центр помощи

3.
приведи пример входных и выходных данных (для четкости понимания задачи). Ранжирование с плавающей точкой получается?

Автор: maxim1000 23.9.2006, 15:52
1. сортируем
2. ранг каждого числа - его порядковый номер в отсортированном массиве
3. пробегаем массив в поисках групп одинаковых элементов, подправляем их ранги

Автор: Kuvaldis 23.9.2006, 15:59
maxim1000
По-моему, не все так гладко.
Например, у нас N чисел со значением А.
Согласно условию задачи, мы их должны поставить ранг по следующей формуле
rank = (A + (A + 1) + (A + 2) + ... (A + N - 1) ) / N = A + (N - 1) / 2
Ранг не всегда целое число, но при определенных N rank >= N + 1.
Согласен? Что тогда в качестве ранга брать для следующей группы одинаковых элементов?
Я поэтому про входные и выходные данные спрашивал.  smile

СУВ 

Автор: maxim1000 23.9.2006, 19:04
Цитата(Kuvaldis @  23.9.2006,  14:59 Найти цитируемый пост)
Ранг не всегда целое число

Цитата(Kuvaldis @  23.9.2006,  14:59 Найти цитируемый пост)
но при определенных N rank >= N + 1.

а что тут такого?
N - количество одинаковых элементов в группе (насколько я понял)
если, например, будут на 8-м и 9-м месте будут два одинаковых числа, то у них ранг будет 8.5, что, конечно же больше N+1 (N в данном случае 2)

Автор: Kuvaldis 23.9.2006, 20:30
maxim1000
Очень извиняюсь smile за
Цитата

но при определенных N rank >= N + 1.

 Не выспался. Надо было написать 
Цитата

но при определенных N  rank >= А + 1.

И встает, таким образом, вопрос: каким числом кодировать следующую группу одинаковых элементов, если   
Цитата

Наибольшему значению начисляется ранг равный количеству чисел в массиве.

Автор: maxim1000 23.9.2006, 22:46
массив: 1,2,2,2,4,5,6,6,8
предварительные ранги: 1,2,3,4,5,6,7,8,9
подправленные ранги: 1,3,3,3,5,6,7.5,7.5,9

Автор: Oleg_Ci 24.9.2006, 07:33
Вобщем порограмма работает так как maxim1000 объяснял
Код

#include<iostream>
#include<stdlib.h>
#include <algorithm>
using namespace std;

////////////////////////  MAIN  /////////////////////////
int main()    
{
    const int len = 10;
    int mas[ len ] = { 2, 3, 4, 1, 1, 3, 4, 2, 1, 3 };
    float rang[ len ];
    int coun;
    int *end_m = mas + len;

    for ( int i=0; i<len; i++ )
        rang[i] = i+1;
    sort( mas, end_m );

    for ( int i=0; i<len; i++ )
    {
        coun = count( mas + i, end_m, mas[i] ) -1;
        if ( !coun ) continue;
        fill( rang + i, rang + i + coun + 1, 1 + i + (float)coun/2 );
        i += coun;
    }

    for ( int i=0; i<len; i++ )
    {
        cout << mas[i] << "  " << rang[i] << "\t" << i+1 << endl;
    }

    system("pause");
    return 0;
}

Автор: AndreyKO 24.9.2006, 10:25
Большое спасибо! Очень выручили!!!  smile 

Автор: Vyacheslav 25.9.2006, 09:42
Для домашних заданий, курсовых, существует "Центр Помощи"

Тема перенесена! 

Автор: aqually 13.10.2022, 11:18
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)