#define USECHRONO #undef HAVE_MPI #include "eval.hpp" #include #include #include #include using namespace aed; using namespace std; //---:---<*>---:---<*>- COMIENZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> // COMPLETAR DNI y NOMBRE AQUI: // Nombre: Bob Esponja int DNI=98765432; float dis_prom(set &S, float p){ float promS = 0; for( set::iterator it=S.begin(); it!=S.end(); ++it ) { promS += float(*it)/S.size(); } return abs(p-promS); } bool es_mayor(set A, set B){ set::iterator itA = A.begin(), itB=B.begin(); if (itA != A.end() && itB == B.end()) return true; int maxA = 0,maxB=0; for( set::iterator it=A.begin(); it!=A.end(); ++it ) { if (*it > maxA) maxA = *it; } for( set::iterator it=B.begin(); it!=B.end(); ++it ) { if (*it > maxB) maxB = *it; } if (maxA > maxB) return true; else if (maxA < maxB) return false; else if (maxA = maxB){ A.erase(maxA); B.erase(maxB); return es_mayor(A,B); } } void calc_sub_propio(set &S, set> &SubPropios){ SubPropios.clear(); set::iterator itS = S.begin(); int N = S.size(); N--; while (itS != S.end()){ set temp; temp.clear(); temp.insert(*itS); SubPropios.insert(temp); set::iterator itS2 = S.begin(); while (itS2 != S.end() && temp.size() != N){ temp.insert(*itS2); if (SubPropios.find(temp) == SubPropios.end()){ SubPropios.insert(temp); } else { temp.clear(); } itS2++; } itS++; } } void get_largest_subset(set &S,set &C){ C.clear(); if (S.empty()) return; float prom = 0; for( set::iterator it=S.begin(); it!=S.end(); ++it ) { prom += float(*it)/S.size(); } float dmin = 100000; set> SP; calc_sub_propio(S,SP); set>::iterator itSub = SP.begin(); while (itSub != SP.end()){ set temp = *itSub; float d = dis_prom(temp,prom); if (d < dmin){ dmin = d; C = temp; } else if (d == dmin && es_mayor(temp,C)){ C = temp; } itSub++; } } //---:---<*>---:---<*>- FINALIZA CODIGO FUNCION --:---<*>---:---<*>---:---<*> int main() { Eval ev; int vrbs=0; ev.eval<1>(get_largest_subset,vrbs); return 0; }