У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


Ранжування при наявності невирішених об'єктів

Короткі теоретичні відомості

Об'єкти називають невирішеними (за ознакою Р або Q), якщо вони сприймаються як однакові і мають однаковий ранг. Це може відбуватися із-за фактичної однаковості об'єктів або недостатньої розрізняльної здатності ранжуючої особи (або алгоритму). Невирішеним об'єктам приписуються однакові значення, рівні середньому значенню рангів при розміщенні об'єктів в будь-якому порядку.

Завдання

Десять об'єктів ранжовані в алфавітному порядку, але деякі об'єкти не вирішені за ознакою Р. Визначити коефіцієнт рангової кореляції .

B-2

O | Q | P

A | 1 | 1

B | 2 | 2

C | 3 | 5

D | 4 | 5

E | 5 | 5

F | 6 | 5

G | 7 | 7

H | 8 | 8

I | 9 | 9

J | 10 | 10

Згідно вказаному правилу ранги об'єктів R, W однакові і рівні:

Програмна реалізація:

#include<iostream.h>

#include<fstream.h>

#include<conio.h>

#include<stdlib.h>

#include<math.h>

struct obj{

char o;

int p,q;

} mas[100];

int i,j,num;

int sort_functionP( const void *a, const void *b)

{

if(((obj*)a)->p<((obj*)b)->p)

return -1;

if(((obj*)a)->p==((obj*)b)->p)

return 0;

return 1;

}

int sort_functionQ( const void *a, const void *b)

{

if(((obj*)a)->q<((obj*)b)->q)

return -1;

if(((obj*)a)->q==((obj*)b)->q)

return 0;

return 1;

}

void main()

{

clrscr();

ifstream f("3.dat");

f>>num;

for(i=0; i<num; i++)

f>>mas[i].o>>mas[i].p>>mas[i].q;

qsort((void*)mas, num, sizeof(mas[i]), sort_functionP);

for(i=0; i<num; i++)

cout<<mas[i].o<<' '<<mas[i].p<<' '<<mas[i].q<<endl;

//невизнач. об’єкти за рангом P

int T=0;

i=0;

while(i<num)

{

j=i;

while((i<num-1)&&(mas[i].p!=mas[i+1].p)) //початок невизнач.

j=++i;

while((i<num-1)&&(mas[i].p==mas[i+1].p)) //кінець невизнач.

i++;

if(i!=j)

cout<<mas[j].o<<" "<<mas[i].o<<endl;

T+=(i-j)*(i-j-1);

i++;

}

// невизнач. об’єкти за рангом Q

int U=0;

qsort((void*)mas, num, sizeof(mas[i]), sort_functionQ);

i=0;

while(i<num)

{

j=i;

// початок невизнач.

while((i<num-1)&&(mas[i].q!=mas[i+1].q))

j=++i;

// кінець невизнач.

while((i<num-1)&&(mas[i].q==mas[i+1].q))

i++;

if(i!=j)

cout<<mas[j].o<<" "<<mas[i].o<<endl;

U+=(i-j)*(i-j-1);

i++;

}

cout<<"Число T="<<T<<endl;

cout<<"Число U="<<U<<endl;

int N=num*(num-1);

cout<<"Число N="<<N<<endl;

int Nskor=sqrt(N-T/2)*sqrt(N-U/2);

cout<<" Скореговане число N="<<Nskor<<endl;

//обчислення тау

int EPlus=0;

for(i=0; i<num-1; i++)

{

int sum=0;

for(j=i+1; j<num; j++)

if(mas[i].p<mas[j].p)

sum++;

EPlus+=sum;

}

float tau=2*EPlus;

tau=tau/Nskor-1;

cout<<"tau="<<tau<<endl;

}

Результат роботи програми.

А 1 1

Б 2 2

В 3 3

Г 4 4

Д 5 5

И 7 9

З 7 8

Ж 7 7

Е 7 6

К 10 10

И Е

Число T=6

Число U=0

Число N=90

Скореговане число N=88

tau=-0.113636