#define USECHRONO #undef HAVE_MPI #include "eval.hpp" #include #include #include #include using namespace aed; using namespace std; void show_set(set A) { cout << "{ "; for (auto i:A) { cout << i <<" "; } cout << "}" << endl; } template void mostrar(list>&ll){ for(auto it = ll.begin();it!=ll.end();it++){ show_set(*it); }} //---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> // COMPLETAR DNI y NOMBRE AQUI: // Nombre: Gassmann Alan int DNI=42248342; ///Algoritmo subk de la unidad de practica void subk(set &S, int k, list>&resultado, set::iterator it, setaux){ if(it== S.end()){return;} aux.insert(*it); k=k-1; if(k==0){ resultado.push_back(aux); return; } while(it!= S.end()){ it++; subk(S,k,resultado,it,aux); } } ///wrapper list> subk(set &S, int k){ list>resultado; auto it = S.begin(); setaux; while(it!=S.end()){ subk(S,k,resultado,it,aux); it++; } return resultado; } float CalcularPromedio(setS){ ///Promedio de un set. if(!S.size())return 0; int suma=0; auto it= S.begin(); while(it!= S.end()){ suma=suma+ *it; it++; } return (suma/S.size() ); } bool relacionOrden(set&S1, set&S2){ auto it1= S1.end(); auto it2= S2.end(); ///Recorrido inverso comparando valores para la relacion de orden. while(it1!= S1.begin() && it2!=S2.begin()){ if(*it1>*it2){ return false; }else if(*it2>*it1){ return true; } it1--; it2--; } if(it1 ==S1.begin()){return true;} if(it2 ==S2.begin()){return false;} } bool es_mayor(setS1, setS2, float promedio){ ///Rertorno true si S2 es mayor que S1 float promedioS1 = CalcularPromedio(S1); float promedioS2 = CalcularPromedio(S2); if(fabs(promedio - promedioS1) > fabs(promedio -promedioS2)){ ///La distancia de menor. return true; }else{ if(fabs(promedio - promedioS1) == fabs(promedio -promedioS2)){ ///La distancia de igual. return relacionOrden(S1,S2); } } ///La distancia de mayor. return false; } void get_largest_subset(set &S, set &C) {C.clear(); ///Genero los sub conjuntos. list>subConjuntos; list>aux; for(int i=0; imasCercano; float promedio=CalcularPromedio(S); while(it != subConjuntos.end()){ if( es_mayor(masCercano,*it,promedio)){ masCercano=*it; } it++; } C= masCercano; // mostrar(subConjuntos); //COMPLETAR! } //---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> int main() { Eval ev; int vrbs=0; ev.eval<1>(get_largest_subset,vrbs); return 0; }