Sto cercando alcuni suggerimenti qui perché non so da dove iniziare la ricerca di questo.Ordinamento di una matrice 2D binaria?
Ho un matrice 2D con 0 o 1 in ciascuna cella, come ad esempio:
1 2 3 4
A 0 1 1 0
B 1 1 1 0
C 0 1 0 0
D 1 1 0 0
e vorrei di risolvere in modo è come "triangolare superiore" possibile, in questo modo:
4 3 1 2
B 0 1 1 1
A 0 1 0 1
D 0 0 1 1
C 0 0 0 1
Le righe e le colonne devono rimanere intatte, ovvero gli elementi non possono essere spostati singolarmente e possono essere scambiati solo "interi".
Capisco che ci sarà probabilmente casi patologici in cui una matrice ha diverse possibili risultati ordinati (ad esempio stessa forma, ma si differenziano per l'identità dei righe/colonne "originali".)
Così, qualcuno può suggerire dove potrei trovare alcuni punti di partenza per questo? Una libreria/algoritmo esistente sarebbe grandiosa, ma mi accontenterò di conoscere il nome del problema che sto cercando di risolvere!
Dubito che sia un problema di algebra lineare in quanto tale, e forse c'è un qualche tipo di tecnica di elaborazione dell'immagine applicabile.
Tutte le altre idee a parte, la mia ipotesi iniziale è solo per scrivere un semplice inserimento sorta sulle righe, poi le colonne e iterare che fino a stabilizzarsi (e la speranza che la rilevazione dei casi patologici non è troppo difficile.)
Maggiori dettagli: alcune ulteriori informazioni su ciò che sto cercando di fare possono aiutare a chiarire. Ogni riga rappresenta un concorrente, ogni colonna rappresenta una sfida. Ogni 1 o 0 rappresenta "successo" per il concorrente in una particolare sfida.
Ordinando la matrice in modo che tutti i 1 siano in alto a destra, spero di fornire una classifica della difficoltà intrinseca di ogni sfida e una classifica dei concorrenti (che terrà conto della difficoltà delle sfide che hanno riuscii a, non solo il numero di successi)
Nota sulla risposta accettata:. ho accettato Simulated Annealing come "la risposta" con l'avvertenza che questa domanda non ha una risposta giusta. Sembra un buon approccio, anche se in realtà non sono riuscito a trovare una funzione di punteggio che funzioni per il mio problema.
domande: (1) Si noti che non c'è niente che puoi fare con una matrice di tutti 1: siete bene con che? (2) Una volta che non ci sono zeri sotto la diagonale, ti preoccupi di dove gli 1 sono sopra la diagonale? (3) Ridurre al minimo il numero di 1 s sotto la diagonale è un criterio abbastanza buono? Che ne dici di minimizzare il numero di righe che hanno (almeno) un 1 sotto la diagonale? – ShreevatsaR
Risposta 1) Sì, tutti gli zeri o tutti non si verificano mai, e se lo facessero, sarebbero per definizione tutti considerati equivalenti, quindi ordinarli in qualche altra permutazione non sarebbe un problema. – Tom
Risposta 2 + 3) Sì, voglio che gli 1 siano il più vicino possibile alla cima di ogni colonna, vale a dire il maggior numero possibile di 1 nell'angolo in alto a destra. Nota che ci possono essere 1 sotto la diagonale e 0 sopra di esso, non è strettamente una matrice triangolare. – Tom