Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - elementi in comune tra n colonne di una matrice
Forum - C/C++ - elementi in comune tra n colonne di una matrice

Avatar
mikemuntain (Normal User)
Newbie


Messaggi: 7
Iscritto: 28/11/2009

Segnala al moderatore
Postato alle 12:51
Sabato, 28/11/2009
Questo topic è stato chiuso dal moderatore

elementi in comune tra n colonne di una matrice
salve inanzitutto vorrei farei i complimenti a tutti i moderatori di questo forum davvero bellissimo e completo.

Vorrei porvi un problemi io ho una matrice di booleani dove al suo interno ci sono vari true e false, adesso io vorrei prendere le righe o le colonne a gruppi n dove n viene dato da input e vedere quali elementi hanno in comune.
Esempio:
ho questa matrice e una 6x6
codice:

    a    b    c    d    e    g
a    F    T    T    T    F    T
b    T    F    F    T    F    F
c    T    F    F    T    T    T
d    T    T    T    F    T    F
e    F    F    T    T    F    T
g    T    F    T    F    T    F


dove le lettere sono degli indici puremente indicativi adesso io dovrei per esempio prendere dei gruppi di n righe o colonne, ad esempio n=3 e dovrei prendere tutte le possibili combinazioni di tre righe o colonne e vedere quali sono gli elementi in comune tra tutti e tre ad esempio:
il gruppo a-c-e ha in comune a in comune tra tutte e tre d e g, e cosi via....
Adesso io ho provato con un brute-force nel senso a crearmi tutte le possibili combinazioni di n righe o colonne ma lo cosa e abbastanza lenta.
Spero abbiate capito cosa voglio realizzare spero nella vostra bonta nell'aiutarmi perchè ne sto uscendo veramente pazzo

Ringrazio a tutti ancipatamente a presto

PM
Avatar
MrC (Member)
Newbie


Messaggi: 19
Iscritto: 28/11/2009

Segnala al moderatore
Postato alle 14:32
Sabato, 28/11/2009
Hai qualche nozione di Algebra Lineare?

http://it.wikipedia.org/wiki/Algebra_lineare :pat:


Al momento non ho voglia di pensare e cercare una soluzione algoritimica al tuo problema, in quanto è tuo :), ma ti posso consigliare di ricercarlo in quella "zona".

Come informatico ti posso consigliare una struttura dati migliore per velocizzare il processo:

un boolean è T o F cioè 0 o 1, se usi una matrice di INTeri ne fai stare (32) in una sola cella e per confrontarli tra loro ti basta un operazione ! XOR

Se poi ti serve un valore preciso basta una masKera di bit cioè int[ pos ] & ( 1 << indirizzo_bool_voluto )

La cosa è più complicata, ma se punti alla velocità molto probabilmente è meglio :-|

Ultima modifica effettuata da MrC il 28/11/2009 alle 14:33


La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
Isaac Asimov
PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:33
Sabato, 28/11/2009



Mai memorizzare quello che puoi comodamente trovare in un libro.
Imparare è un'esperienza; tutto il resto è solo informazione.
L'immaginazione è più importante della conoscenza.
(A. Einstein)


Esistendo poi google...
PM