Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcus Vinicius_207844

Algoritmo comparação PHP

Recommended Posts

Assisti ao filme A rede Social, e em uma parte (Bem no começo), o cara pede um algorítimo para o outro, para fazer um site. Ele escreve na janela do quarto.
Segue a imagem do filme com o algorítimo ai:
main-qimg-9ff9f83887352c71dc1c0a33c43c2d

O que seria isso? Como escreve isso no PHP?

para quem ainda não entendeu o que eu quero fazer é isso aqui descrito nesta cena do filme:

Tá ok.
Vou tentar Escrever a cena.
É entre Mark e o amigo dele Eduardo.
Mark fez um site para comparar qual garota é mais gostosa.
Ele dá duas opções na tela. A da esquerda e a da direita.
Dai ele apronta o site e pede o algoritimo.

Mark: - Preciso do algorítimo que você usa para classificar os jogadores de xadrez.
- Vamos comparar garotas.
-Eduardo - Outros alunos?
--- Depois de um bla bla bla: -------
Eduardo - Dê a cada garota uma base de classificação de 1400.
- Em um momento a garota A é definida por Ra
- E a garota B é definida por Rb
Mark - Quando duas garotas competirem, haverá a expectativa de qual vai ganhar baseado na classificação atual, né?
Eduardo - É. E essas expectativas são expressadas assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto se escreve exatamente assim no PHP, onde

$Ea = 1/(1+10*($rb-$ra)/400);
$Ea = 1/(1+10*($ra-$rb)/400);

Onde $Ea e $Eb são coeficientes de expectativas para a garota A e a garota B, ou seja, a expectativa que cada garota tem para vencer, e $ra e $rb são as taxas de que as garotas já venceram, pense que isto era para comparar jogadores de xadrez, ou seja, EB originalmente é a chance de que um cara B tem para ganhar e EA é a chance que o cara A tem para ganhar. Logo ambos os coeficientes não podem ser calculados independentemente, pois se a taxa de vitórias de A for 50% logo RA = 0,5 portanto se o B ganhou apenas 20% das partidas, o coeficiente RB se torna 0,20.

 

Disto podemos tomar que o EB e EA dependem um do outro para que o cálculo para um deles vença seja maior. Em termos simples, a cada voto de uma pessoa em A ou B aumenta a possibilidade de esta pessoa ganhar, uma vez que todos começam com o coeficiente RA e RB = 1400. A cada vez que um dos dois ganha, o coeficiente de um aumenta um ponto e o de outro diminui um ponto..

 

Vale lembrar que isto é um filme portanto as equações não estão totalmente corretas, existem mais coisas por trás disto, onde provavelmente a divisão dos coeficientes por 400 não vai retornar probabilidades satisfatórias, logo a equação deveria ser algo como:

 

Ea = 1 / (1 + 10 ^ ((Rb-Ra)/400))
Eb = 1 / (1 + 10 ^ ((Ra-Rb)/400))

 

Onde EA+EB = 1 (100%)

 

Para mais informações olhe as respostas a este tópico: http://shotgunapproach.wordpress.com/2010/10/08/the-algorithm-for-facemash-in-the-social-network/

Compartilhar este post


Link para o post
Compartilhar em outros sites

A cada clique, o coeficiente de uma aumenta e o da outra diminui, porque a garota 1 ganhou uma partida a mais que a garota 2, ou seja, RA e RB se alteram a medida que você vai clicando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai usar o php, ou qualquer outra linguagem de programação, a ideia de fazer a pontuação aumentar é apenas aumentar os coeficientes RA e RB, ou seja, basicamente você troca os valores dos algoritmos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele está dando erro porque o banco de dados que ele está tentando acessar não existe. Mas vamos lá, a maioria dos dados que você precisa está no index.php e no rate.php

 

No index você pode ver o algoritmo que ele usa aqui:

SELECT *, ROUND(score/(1+(losses/wins))) AS performance FROM images ORDER BY ROUND(score/(1+(losses/wins))) DESC LIMIT 0,10

Ou seja, aquele algoritmo está em score/(1+(razão de perdas/ganhos)). Quando uma foto é clicada ele redireciona para o Rate.php com dois parâmetros via GET, lá ele vai realizar a função Win, Loss e expected que estão no functions.php

 

function expected($Rb, $Ra) {
return 1/(1 + pow(10, ($Rb-$Ra)/400));
}


// Calculate the new winnner score
function win($score, $expected, $k = 24) {
return $score + $k * (1-$expected);
}


// Calculate the new loser score
function loss($score, $expected, $k = 24) {
return $score + $k * (0-$expected);
}

Quando uma imagem é votada, ele vai gerar novamente os valores para os esperados e a quantidade que ele ganhou:

 

// Update the winner score
$winner_expected = expected($loser->score, $winner->score);
$winner_new_score = win($winner->score, $winner_expected);
//test print "Winner: ".$winner->score." - ".$winner_new_score." - ".$winner_expected."<br>";
mysql_query("UPDATE images SET score = ".$winner_new_score.", wins = wins+1 WHERE image_id = ".$_GET['winner']);




// Update the loser score
$loser_expected = expected($winner->score, $loser->score);
$loser_new_score = loss($loser->score, $loser_expected);
//test print "Loser: ".$loser->score." - ".$loser_new_score." - ".$loser_expected."<br>";
mysql_query("UPDATE images SET score = ".$loser_new_score.", losses = losses+1  WHERE image_id = ".$_GET['loser']);

Veja o que ele faz com cada valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.