|
Chobeat |
calcolo affinità |
08-12-2010 10:52 |
|
|
Chobeat |
.illuminato.
Registered: Sep 2007
Posts: 241 (0.04 al dì)
Location: Alessandria
Corso: Informatica
Anno: 1
Time Online: 1 Day, 6:13:29 [...]
Status: Offline
Edit | Report | IP: Logged |
calcolo affinità
Sto penando per realizzare appropriatamente la funzione di calcolo dell'affinità ma ho paura di fare una roba pesantissima e malfatta.
Ho realizzato una funzione che calcola correttamente l'affinità tra 2 utenti, ma mi sembra scontato che iterarla su tutto il database e sortare selezionando i primi 100, è una cazzata.
Quindi vorrei sapere voi in linea generale come avete impostato, oppure se avete trovato qualche testo che spieghi i fondamenti per realizzare in maniera ottimale questo tipo di funzioni.
|
08-12-2010 10:52 |
|
|
| |
|
fabrileroy |
anche io ho questo problema, nel senso che non cap ... |
12-12-2010 17:03 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
anche io ho questo problema, nel senso che non capisco quale dovrebbe essere il livello di affinità utile per comparire nella lista.
|
12-12-2010 17:03 |
|
|
| |
|
CowBoy |
Se hai usato l'indicizzazione allora la selezione ... |
23-12-2010 13:15 |
|
|
CowBoy |
.arcimaestro.
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline
Edit | Report | IP: Logged |
Se hai usato l'indicizzazione allora la selezione e/o l'iterazione vengono eseguite abbastanza velocemente. Se magari scrivete i requisite e cosa deve fare questa funzione magari vi vengono in aiuto anche utenti che non sono immersi nel vostro progetto...
__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..
|
23-12-2010 13:15 |
|
|
| |
|
fabrileroy |
ciao, io ho scritto una cosa del genere, ma mi sem ... |
26-12-2010 15:57 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
ciao, io ho scritto una cosa del genere, ma mi sembra abbastanza complessa e non mi stampa proprio ciò che desidero:
<?php
function similare($login, $connection)
{
//QUI DOVREI INSERIRE UN CONTROLLO CHE SE GLI UTENTI SONO < 100 ALLORA LI STAMPO TUTTI
// SIMILARITà SUI GIOCHI POSSEDUTI
$query=" SELECT login FROM utente WHERE login<> '$login' "; //seleziono gli utenti diversi da quello che considero
$resource=pg_query ($connection, $query);
$key=0;
while($row=pg_fetch_row($resource, $i))
{
$count=0;
$que=" SELECT gioco FROM lista_posseduti WHERE utente='$row[0]' "; // seleziono i giochi posseduti dall'utente risultato della pg_fetch_row
$res=pg_query ($connection, $que);
while($ro=pg_fetch_row($res, $w))
{
if(empty($ro[0])) { break; }
else
{
$q=" SELECT count(*) FROM lista_posseduti WHERE gioco='$ro[0]' AND utente='$login' "; // conto se se il gioco puntato dal secondo pg_fetch_row è posseduto anche dall'utente che considero
$rs=pg_query ($connection, $q);
$r=pg_fetch_row($rs, $z);
if ($r[0]!=0) { $count++; }
}
$key=$count;
if (empty($simile[$key])) { $simile[$key]=$row[0]; } // in questa parte aggiorno un array che alla fine dovrà contentere i primi 100 utenti + simili
else { for($key_tmp=$key+1; key_tmp <=100; $key_tmp++)
{ if (empty($simile[$key_tmp])) { $simile[$key_tmp]=$row[0]; break; }}}
}
}
print_r ($simile);
}
?>
|
26-12-2010 15:57 |
|
|
| |
|
fabrileroy |
e comunque la richiesta sarebbe questa:
... |
26-12-2010 15:59 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
e comunque la richiesta sarebbe questa:
"applicazione segnala a ogni utente la lista dei primi 100
utenti a lui piu simili. La similarita fra utenti e misurata da un valore numerico proporzionale
al numero di giochi posseduti e desiderati in comune e al giudizio espresso su tali giochi." grazie
|
26-12-2010 15:59 |
|
|
| |
|
fabrileroy |
posto lo script di prima corretto, perchè c'erano ... |
26-12-2010 16:21 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
posto lo script di prima corretto, perchè c'erano delle cose errate:
<?php
function similare($login, $connection)
{
//QUI DOVREI INSERIRE UN CONTROLLO CHE SE GLI UTENTI SONO < 100 ALLORA LI STAMPO TUTTI
// SIMILARITà SUI GIOCHI POSSEDUTI
$query=" SELECT login FROM utente WHERE login<> '$login' "; //seleziono gli utenti diversi da quello che considero
$resource=pg_query ($connection, $query);
$key=0;
while($row=pg_fetch_row($resource, $i))
{
$count=0;
$que=" SELECT gioco FROM lista_posseduti WHERE utente='$row[0]' "; // seleziono i giochi posseduti dall'utente risultato della pg_fetch_row
$res=pg_query ($connection, $que);
while($ro=pg_fetch_row($res, $w))
{
if(empty($ro[0])) { break; }
else {
$q=" SELECT count(*) FROM lista_posseduti WHERE gioco='$ro[0]' AND utente='$login' "; // conto se il gioco puntato dal secondo pg_fetch_row è posseduto anche dall'utente che considero
$rs=pg_query ($connection, $q);
$r=pg_fetch_row($rs, $z);
if ($r[0]!=0) { $count++; }}
}
if($count!=0)
{
$key=$count;
if (empty($simile[$key])) { $simile[$key]=$row[0]; } // in questa parte aggiorno un array che alla fine dovrà contentere i primi 100 utenti + simili
else { for($key_tmp=$key+1; key_tmp <=100; $key_tmp++)
{ if (empty($simile[$key_tmp])) { $simile[$key_tmp]=$row[0]; break; }}}
}
}
for($scr=0; $scr<count($simile)+1; $scr++) {
echo "$simile[$scr]"; echo"<br>"; }
}
?>
|
26-12-2010 16:21 |
|
|
| |
|
CowBoy |
Allora - in teoria - la soluzione migliore sarebbe ... |
26-12-2010 16:24 |
|
|
CowBoy |
.arcimaestro.
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline
Edit | Report | IP: Logged |
Allora - in teoria - la soluzione migliore sarebbe di creare una funzione in PL/pgSQL. La funzione dovrebbe semplicemente selezionare tutti gli utenti, fare un join con i giochi e restituire una lista contenente nome e numero(tramite count()) di giochi tutto con un sort sul numero. Per concludere in php non vi resta che leggere l'output della funzione con un ciclo for da 0 a 99...
Usare le funzioni su postgres vi fa risparmiare tempo sui calcoli dato che un DBMS cerca sempre la via migliore senza che ci pensiate voi all'ottimizzazione.
__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..
|
26-12-2010 16:24 |
|
|
| |
|
Chobeat |
Sì e sopratutto ti permette di avere un voto dece ... |
26-12-2010 16:38 |
|
|
Chobeat |
.illuminato.
Registered: Sep 2007
Posts: 241 (0.04 al dì)
Location: Alessandria
Corso: Informatica
Anno: 1
Time Online: 1 Day, 6:13:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Sì e sopratutto ti permette di avere un voto decente, perchè se ste cose le fai in PHP, ti fucilano alla discussione.
|
26-12-2010 16:38 |
|
|
| |
|
CowBoy |
[QUOTE][i]Originally posted by Chobeat [/i]
... |
26-12-2010 16:53 |
|
|
CowBoy |
.arcimaestro.
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline
Edit | Report | IP: Logged |
Originally posted by Chobeat
Sì e sopratutto ti permette di avere un voto decente, perchè se ste cose le fai in PHP, ti fucilano alla discussione.
hahaha... sono d'accordissimo!!
__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..
|
26-12-2010 16:53 |
|
|
| |
|
fabrileroy |
grazie per il consiglio ... proverò a vedere se r ... |
28-12-2010 12:58 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
grazie per il consiglio ... proverò a vedere se riesco a combinare qualcosa d + accettabile...al max vi scrivo
|
28-12-2010 12:58 |
|
|
| |
|
fabrileroy |
Mi sembra però che CowBoy tu la faccia un pò tro ... |
28-12-2010 15:53 |
|
|
fabrileroy |
.simpatizzante.
Registered: Jul 2009
Posts: 14 (0.00 al dì)
Location: milano
Corso: Informatica per le telecomunicazioni
Anno: 4
Time Online: 2:05:12 [...]
Status: Offline
Edit | Report | IP: Logged |
Mi sembra però che CowBoy tu la faccia un pò troppo facile.... nella tua breve spiegazione non trovo la verifica di somiglianza tra l'utente scelto e gli altri utenti !!
|
28-12-2010 15:53 |
|
|
| |
|
CowBoy |
Il progetto di DB l'ho già superato. Stavo sempli ... |
04-01-2011 16:08 |
|
|
CowBoy |
.arcimaestro.
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline
Edit | Report | IP: Logged |
Il progetto di DB l'ho già superato. Stavo semplicemente condividendo la mia opinione riguardo il problema, in linea teorica... ovviamente nella realtà tutto dipende dai requisiti e dal modello creato.
__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..
|
04-01-2011 16:08 |
|
|
| |
|
All times are GMT. The time now is 18:27. |
|
|
|
|
|
|
|
| |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|