Creazione di un albero di oggetti basato sulla comunanza delle sue proprietà?

3

Ho un problema con l'algoritmo. Semplificheremo il problema, perché la maggior parte di ciò di cui ho a che fare non ha nulla a che fare con l'algoritmo di cui ho bisogno.

Fondamentalmente, ho una lista di oggetti che hanno ciascuno proprietà. Diciamo per semplicità che si trattava di una semplice struttura o di un altro tipo di dati semplice contenente un ID stringa e una serie di stringhe che sono le sue proprietà. Le proprietà possono essere cose come "strumento", "arma", "cibo", ecc.

Quello che devo fare è trasformare questo elenco di oggetti in un albero, dove le proprietà più comuni vanno in primo piano e quelle meno comuni in fondo. È un po 'più complesso di quello, in realtà. Ad esempio, supponiamo di avere:

  • Quattro oggetti con solo la proprietà "arma".
  • Sei oggetti con una proprietà "strumento" e "arma".
  • Due elementi con una proprietà "cibo" e "frutto".
  • Un oggetto con una proprietà "tool".

Se dovessi trasformare questo nell'albero che voglio, sarebbe simile a questo:

  • weapon (poiché ci sono dieci elementi che hanno la proprietà dell'arma)
    • tool (poiché ci sono sei elementi con le proprietà dello strumento e dell'arma)
  • %codice%
    • food
  • fruit

È semplice da fare a mano, ma non riesco a spiegarmi come metterlo in forma di programma. Qualche aiuto?

    
posta cpancake 28.12.2014 - 09:44
fonte

1 risposta

3

Puoi implementare in modo ricorsivo:

  1. Trova la proprietà più comune nel set di oggetti.
  2. Rendi questa proprietà una (nuova) radice dell'albero.
  3. Dividi l'insieme in un sottoinsieme di oggetti che hanno la proprietà e un sottoinsieme di oggetti che non hanno la proprietà.
  4. Recurse: crea un albero del sottoinsieme di oggetti che hanno la proprietà (rimuovendo questa proprietà da tutti gli oggetti) e imposta quell'albero come sottostruttura della root appena creata.
  5. Ripeti i passaggi 1..5 con l'altro sottoinsieme (gli oggetti che non avevano la proprietà selezionata) fino a quando il set è vuoto.
risposta data 28.12.2014 - 11:31
fonte

Leggi altre domande sui tag