Come implementazione c'e, quindi chiudo questa e apro una seconda issue a tema.
Ma penso che e' da riconsiderare l'implementazione:
Al momento viene copiata la scacchiera che e' pessimo a livello di memoria.
Possiamo andare a copiarla solo una volta ed utilizzare le funzioni markColumn() e unmarkColumn() della board.
Questo avrebbe complessita' computazionale di:
O(k log n) in caso di markColumn dove k e' il numero di pezzi da connettere ed n e' il numero di mosse considerate
O(log n) in caso di unmarkColumn().
Forse si puo' trasformare markColumn() in O(log n) sacrificando l'accuratezza del gameState, ma non conviene perche':
Introduce bug
L' algoritmo finale avra'complessita' legata a k comunque. L'importante e' provare a tenerlo lineare o al massimo k log k.
Come implementazione c'e, quindi chiudo questa e apro una seconda issue a tema. Ma penso che e' da riconsiderare l'implementazione: Al momento viene copiata la scacchiera che e' pessimo a livello di memoria. Possiamo andare a copiarla solo una volta ed utilizzare le funzioni markColumn() e unmarkColumn() della board. Questo avrebbe complessita' computazionale di: O(k log n) in caso di markColumn dove k e' il numero di pezzi da connettere ed n e' il numero di mosse considerate O(log n) in caso di unmarkColumn().
Forse si puo' trasformare markColumn() in O(log n) sacrificando l'accuratezza del gameState, ma non conviene perche':