Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi A - F > Basi di dati ~ informatica triennale > calcolo affinità
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
Chobeat
.illuminato.

User info:
Registered: Sep 2007
Posts: 241 (0.04 al dì)
Location: Alessandria
Corso: Informatica
Anno: 1
Time Online: 1 Day, 6:13:29 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for Chobeat Click here to Send Chobeat a Private Message Find more posts by Chobeat Add Chobeat to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
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

Post actions:

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
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
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

Post actions:

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
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
Chobeat
.illuminato.

User info:
Registered: Sep 2007
Posts: 241 (0.04 al dì)
Location: Alessandria
Corso: Informatica
Anno: 1
Time Online: 1 Day, 6:13:29 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for Chobeat Click here to Send Chobeat a Private Message Find more posts by Chobeat Add Chobeat to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
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

Post actions:

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!! :D

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..

26-12-2010 16:53
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fabrileroy
.simpatizzante.

User info:
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

Post actions:

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
Click Here to See the Profile for fabrileroy Click here to Send fabrileroy a Private Message Find more posts by fabrileroy Add fabrileroy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
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

Post actions:

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
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 06:51.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

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
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.084 seconds (72.55% PHP - 27.45% MySQL) con 28 query.