Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> algorytm do oceny fotek
ersiv
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 11.04.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


jest sobie serwis x i głosuje się tam na fotki, każdy użytkownik ma ranking liczony na podstawie oddanych głosów, skala od 1-10 wartość średnia odpada (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
potrzebuję uwzględnić coś takiego że np profil mający 100 głosów na '1' jest dużo gorszy od profilu mającego 10 głosów na '1', a np profil mający głosy 1x8, 1x9, 1x10 jest lepszy od tego, który ma tylko 1x10.... wydaje się proste ale nic mądrego nie przychodzi mi do głowy, szukam, szukam i ciężko... miliony jets tkaich serwisów, gdzie głosuje sie na cokolwiek ale nie mogę znaleź gotowych rozwiązań
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Nattfarinn
post
Post #2





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Myślę, że najlepsze rozwiązanie to wyznaczenie średniej oceny a następnie branie pod uwagę ilości oddanych głosów. W zależności od średniej, duża ilość głosów świadczyłaby na korzyść lub niekorzyść wartości oceny o tej samej średniej.

Teraz chodzi o ustalenie wagi głosów. Bo akurat skrajne głosy są oczywiste, 3x10 jest mniej warte od 5x10, ale 5x1 jest mniej warte od 3x1. Ale co w przypadku 3x3 a 5x3? Co w przypadku 3x4 a 5x4? Trzeba przyjąć połowę, czyli średnią 5,5. Oceny o tej samej średniej, ale większej (lub równej) od połowy, będą sortowane wg. malejącej ilości głosów, te ze średnią mniejszą od połowy, sortowane wg. rosnącej ilości głosów.

Jak to będzie wyglądało w praktyce?

Fotka 1: 1 1 1 1 1 1 1 1 (średnia: 1, głosów: 8)
Fotka 2: 1 1 1 1 1 (średnia: 1, głosów: 5)
Fotka 3: 1 1 1 1 1 1 1 1 1 1 1 1 2 (średnia: 1.076, głosów: 13)
Fotka 4: 1 1 1 1 1 1 1 1 1 1 1 1 1 3 (średnia: 1.143, głosów: 14)
Fotka 5: 5 6 (średnia: 5.5, głosów: 2)
Fotka 6: 5 6 5 6 5 6 5 6 (średnia: 5.5, głosów: 8)
Fotka 7: 5 5 6 5 6 5 6 5 (średnia: 5.375, głosów: 8)
Fotka 8: 5 (średnia: 5, głosów: 1)
Fotka 9: 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 (średnia: 5, głosów: 25)

Posortowane da w wyniku fotki (kolejno od najlepszej do najgorszej):
6, 5, 7, 8, 9, 4, 3, 2, 1

Trzeba więc przyjąć, że Fotki o średniej < 5.5 są negatywne, a fotki >= 5.5 pozytywne. Im mniej głosów w fotce o ocenie negatywnej tym lepiej, odwrotnie dla fotek pozytywnych: ogromna ilość głosów przy zachowaniu oceny pozytywnej jest więcej warta od tej samej średniej ale uzyskanej np. 3 głosami.

Ciężko będzie znaleźć inne rozwiązanie. Te podane przez Spirit86 raczej odpadają. Pierwszy sposób nie zmienia właściwie nic, drugi zaś o ilę się nie mylę wykaże, że 2x10 + 1000x1 jest lepsze od 1x10 + 1x1.

Namieszałem, co?

W bazie dla każdej fotki przechowywana jest suma głosów i ilość głosów. Teraz wyciągasz za pomocą dwóch zapytań fotki pozytywne i negatywne (przyznaję się bez bicia, że nie wiem jak rozwiązać to za pomocą jednego zapytania) sortując je głównie wg średniej oceny (suma/ilość) a następnie wg. ilości głosów (inaczej dla obu zapytań, w zalezności od tego czy fotki są pozytywne czy negatywne).

Coś jakby:
Kod
[Pozytywne]: SELECT photo_id FROM photo_rating WHERE  photo_rate_sum/photo_rate_count >= 5.5 ORDER BY photo_rate_sum DESC,  photo_rate_count DESC

Kod
[Negatywne]: SELECT photo_id FROM photo_rating WHERE photo_rate_sum/photo_rate_count < 5.5 ORDER BY photo_rate_sum DESC, photo_rate_count ASC


I to właściwie tyle...

Pozdrawiam!
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 02:42