Voor een project moet ik de mate van vergelijkbaarheid van twee objecten uitrekenen. In plaats van een boolean waarde heb ik echter een score nodig, bijvoorbeeld in de range [0,1]. Deze objecten kunnen ook arrays zijn, daarbij ben ik op zoek naar een percentage van overeenkomende elementen.
Een simpel voorbeeld:
Er zullen natuurlijk ook gevallen zijn waarbij het antwoord minder simpel te bepalen is:
Mijn twee mogelijke oplossingen zijn:
Hierbij ga je uit van de lengte van de eerste array en geldt de score dus expliciet één kant uit. (first -> second != second -> first)
Deze gaat uit van de lengte van beide array's, waarbij dus geldt dat de score beide kanten op gelijk is. (first -> second = second -> first)
Wat vinden jullie van deze oplossingen? Heeft iemand andere suggesties die wellicht meer (wiskundig) onderbouwd kunnen worden? Alvast bedankt!
Een simpel voorbeeld:
Ruby:
1
| [1,2,3].compare([1,2,3]) # 1.0 |
Er zullen natuurlijk ook gevallen zijn waarbij het antwoord minder simpel te bepalen is:
Ruby:
1
2
3
| [1,2].compare( [1,3] ) # 0.5? [1,2,4].compare( [1,3] ) # 0.5? [1,2,3].compare( [1,3] ) # 1.0? |
Mijn twee mogelijke oplossingen zijn:
Ruby:
1
2
3
| def compare_array(first, second) ( second.length - (second-first).length ) / first.length end |
Hierbij ga je uit van de lengte van de eerste array en geldt de score dus expliciet één kant uit. (first -> second != second -> first)
Ruby:
1
2
3
4
| def compare_array(first, second) t = first.uniq + second.uniq ( t.length - t.uniq.length )*2 / t.length end |
Deze gaat uit van de lengte van beide array's, waarbij dus geldt dat de score beide kanten op gelijk is. (first -> second = second -> first)
Wat vinden jullie van deze oplossingen? Heeft iemand andere suggesties die wellicht meer (wiskundig) onderbouwd kunnen worden? Alvast bedankt!