| TheCrusader a întrebat:

Lucrez cu ceva destul de complicat:
Am o functie f ce ia doua stringuri a si b si imi returneaza o valoare intre 0 si 1 in functie de relatia intre cele doua.
Ex: f("masina", "flori") ~= 0, 150027
f("motor", "masina") ~= 0. 408004

Eu vreau sa fac un algorithm care imi returneaza o valoare intre 0 si 1 ce compara doua liste de stringuri de un singur cuvant l1 si l2 (reprezentand interesele celor doua persoane).
Niste idei?
PS. va rog tineti cont ca functia nu trebuie sa se comporte abnormal!
Ex: l1 = "masini", "jocuri", "muzica"
l2 = "jaz", "BMW", "csgo"
l3 = "puzzle", "shooter", "carti", "flori", "platformer"
f(l1, l2) > f(l3, l2)
SI cel mai important, functia trebuie sa fie si simetrica:
f(lx, ly) = f(ly, lx)

! Nu am nevoie sa imi scrieti nici un program, o explicatie matematica a ideii imi ajunge.

2 răspunsuri:
| MMAV a răspuns:

Eu nu înțeleg de unde scoți tu numărul și cu ce criteriu stabilești outputul funcției. Ca funcția să fie simetrică trebuie să știi criteriul după care lucrează, altfel nu se poate. Aceata îți poate garanta sau nu o astfel de relație. Dar aceea cu simetrică are un pic de legătură cu teoria algebrelor liniare, mai exact aplicații liniare.

| TheCrusader explică (pentru MMAV):

In spatele functiei sunt mii de lini de cod si o baza de date de peste 5 GB. Am incercat diferite metode ca sa pot sa extind functia sa mearga pe liste, dar pur si simplu outputul nu e satisfacator. (Momentan sunt in pana de idei). Daca nu s-a inteles din ce am scris, functia returneaza un numar ce semnifica cat de apropiate sunt cele doua obiecte ca sens(in cazul asta sunt stringuri). Ma gandeam acum sa fac cu maxime locale. Problema pe care incerc sa o rezolv e ca listele mici au o sansa mai mica sa fie luate in considerare pentru ca listele mai mari au mai multe cuvinte si astfel o sansa mai mare sa iasa un numar mai mare la calcul, chiar daca uneori nu este cazul.

Dar nu trebuie sa stii neaparat ce face functia ca implementare; trebuie sa te gandesti ca ai o matrice n x m si vrei ca functia sa iti returneze un numar intre 0 si 1; Functia trebuie sa fie si "scalabila"(sa nu se comporte diferit la inputuri mari decat la cele mici) si trebuie sa fie si simetrica.