|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2004
Città: Padova (PD)
Messaggi: 2192
|
[JAVA] Calcolo complessità metodo ricorsivo
Salve,
qualcuno mi può aiutare a trovare la complessità computazionale (asintotica) di questo metodo ricorsivo? Grazie in anticipo. Codice:
private static void antichainCreator(Node lastNode, ArrayList<Node> antiChain){
_hashChoicelist = new Hashtable<Node, ArrayList<String>>();
_hashChoicelist.put(lastNode,lastNode.getElementList());
if(!_hashChoicelist.get(lastNode).isEmpty()){
ArrayList<String> next = _hashChoicelist.get(lastNode);
for (int i = 0; i < next.size(); i++){
Node focus = _hashNodeList.get(next.get(i));
if (!antiChain.contains(focus)
&& focus.isGood(antiChain)){
ArrayList<Node> antiChainTemp = (ArrayList<Node>)antiChain.clone();
antiChainTemp.add(focus);
antichainCreator(focus, antiChainTemp);
} else {
if(!_antiChainList.contains(antiChain)){
_antiChainList.add(antiChain);
_antichainMax(antiChain);
}
}
}
}
}
Codice:
public boolean isGood(ArrayList<Node> antiChain){
boolean check = true;
for(int i=0; i < antiChain.size();i++){
if(antiChain.get(i).isInBlackList(_name)){
check = false;
break;
}
}
return check;
}
public boolean isInBlackList(String elem){
return(_blacklist.contains(elem));
}
__________________
Vendo/Scambio: |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2004
Città: Padova (PD)
Messaggi: 2192
|
Uppolo
__________________
Vendo/Scambio: |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Sarebbe meglio che prima postassi il tuo tentativo di risoluzione del problema, magari indicando i dubbi specifici che hai: così chi ti legge può aiutarti, altrimenti l'alternativa sarebbe rispondere direttamente ma il regolamento di questa sezione del forum vieta di postare soluzioni complete ad esercizi.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Padova (PD)
Messaggi: 2192
|
Quote:
Cmq avevamo pensato a O(n^2) ... cmq non ci convince quell' isGood (che nel caso pessimo si cicla tutta la lista ...)
__________________
Vendo/Scambio: |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non me ne intendo di complessità computazionale, però avete tenuto conto anche delle chiamate al metodo contains? In teoria hanno costo lineare anche quelle, almeno a leggere la javadoc:
Quote:
Ma aspetta qualcuno di più esperto, ripeto, sono ignorante in materia
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Padova (PD)
Messaggi: 2192
|
Quote:
__________________
Vendo/Scambio: |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Da quanto ho capito ipotizzando che le chiamate a funzioni di libreria abbiano tutte costo costante ho che dentro antiChainCreator chiamo isGood che nel caso pessimo costa n e antiChainCreator che nel caso pessimo costa n^n perchè chiama se stessa n volte e per tutte le n volte cicla sugli n elementi, essendo funzioni in serie queste complessità si sommano pertanto la complessità nel caso pessimo asintotica è O(n^n).
Ovviamente non è l'apocalisse questa perchè alcuni algoritmi hanno complessità O(n^n) ma il caso pessimo ha una probabilità bassissima di accadimento e nei casi medio e ottimo hanno una complessità migliore di altri. Sta a te valutare in base a come è stato ideato se sei in tali condizioni ottimali. Poi si sa che la ricorsione quando vi sono cicli di mezzo costa molto in termini di computazione e risorse sotto caso pessimo, anche perchè a mio avviso è diabolico usare un ciclo dentro una funzione ricorsiva come in questo caso, e se lo si fa bisogna essere ben consapevoli di quello che si sta facendo. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
E rabbrividisco
__________________
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:00.




















