Ferramentas de Utilizador

Ferramentas de Site


inf05504:2011-2-trabalhos

Diferenças

Esta página mostra as diferenças entre as duas revisões da página.

Ligação para esta vista de comparação

Ambos os lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
inf05504:2011-2-trabalhos [2011/09/05 15:54]
marcus [Trabalho 2 (Heaps de Fibonacci)]
inf05504:2011-2-trabalhos [2011/12/13 23:39] (Actual)
marcus [Entregas]
Linha 6: Linha 6:
  
 ==== Entregas ==== ==== Entregas ====
-^ No. ^ T1 ^ T2 ^ + 
-| 152985 |  - | | +Atualizado: 13/​12/​2011 
-| 159011 |  - | | + 
-| 159098 |  ​R ​| | +^ No. ^ T1 ^ T2 ^ T3 ^ T4 ^ T5 
-| 171359 |  ​R ​| | +| 152985 | - | - | - | - | - 
-| 172072 |  ​R ​| | +| 159011 | - | - | - | - | - 
-| 173256 |  - | | +| 159098 | P | P | P | R 
-| 173361 |  ​R ​| | +| 171359 | P | P | P | R 
-| 180658 |  ​R ​| | +| 172072 | P | P | P | - 
-| 180689 |  - | |+| 173256 | P | P | P | - | 
 +| 173361 | P | P | P | - 
 +| 180658 | P | P | P | - 
 +| 180689 | P | P | - | - | - |
  
 R = recebido R = recebido
 +P = avaliado e publicado
  
  
Linha 123: Linha 127:
 === Objetivos === === Objetivos ===
   * Implementar um heap de Fibonacci e verificar a complexidade das operações experimentalmente.   * Implementar um heap de Fibonacci e verificar a complexidade das operações experimentalmente.
-  * Verificar a complexidade do algoritmo de Dijkstra usando um heap binomial ​experimentalmente.+  * Verificar a complexidade do algoritmo de Dijkstra usando um heap de Fibonacci ​experimentalmente.
   * Comparar as complexidades experimentais dos heaps binários e Fibonacci.   * Comparar as complexidades experimentais dos heaps binários e Fibonacci.
   * Comparar as complexidades experimentais do algoritmo de Dijkstra com os dois heaps.   * Comparar as complexidades experimentais do algoritmo de Dijkstra com os dois heaps.
Linha 185: Linha 189:
  
 === Convenções === === Convenções ===
-  * As implementações do algoritmo devem aceitar ​uam instância no formato {{http://​lpsolve.sourceforge.net/​5.5/​DIMACS_maxf.htm|DIMACS}} na entrada padrão (stdin) e imprimir o valor do fluxo máximo na saída padrão (stdout).+  * As implementações do algoritmo devem aceitar ​uma instância no formato {{http://​lpsolve.sourceforge.net/​5.5/​DIMACS_maxf.htm|DIMACS}} na entrada padrão (stdin) e imprimir o valor do fluxo máximo na saída padrão (stdout).
  
 === Verificação ​ === === Verificação ​ ===
Linha 236: Linha 240:
  
   // (1) determine maximum flow   // (1) determine maximum flow
-  cout << ​edmunds_karp_max_flow(g, s, t,+  cout << ​edmonds_karp_max_flow(g, s, t,
                                 capacity_map(get(&​EdgeInformation::​edge_capacity,​g)).                                 capacity_map(get(&​EdgeInformation::​edge_capacity,​g)).
                                 residual_capacity_map(get(&​EdgeInformation::​edge_residual_capacity,​g)).                                 residual_capacity_map(get(&​EdgeInformation::​edge_residual_capacity,​g)).
Linha 242: Linha 246:
 } }
 </​code>​ </​code>​
 +
 +
 +
 +==== Trabalho 4 (Segmentação de imagens) ====
 +
 +Entrega: 10/10/2011
 +
 +=== Objetivos ===
 +  * Implementar um algoritmo de segmentação de imagens como vista em aula.
 +  * Usar a própria implementação do fluxo máximo na solução.
 +  * Segmentar uma imagem em pele/​não-pele com pesos de separação diferentes.
 +
 +=== Casos de teste ===
 +  * O caso de teste é uma imagem de si mesmo.
 +
 +=== Convenções ===
 +  * As implementações do algoritmo devem aceitar uma imagem no formata PPM plain na entrada padrão (stdin) e imprimir uma imagem no mesmo formato (com todos pixels não-pelo em preto) na saída padrão (stdout).
 +
 +=== Códigos disponíveis ===
 +  * Ler uma imagem PPM plain
 +<code c++>
 +// image data structure
 +enum { R = 0, G, B };
 +typedef unsigned short Color;
 +typedef multi_array<​Color,​3>​ Image;
 +
 +// read an image im PPM (plain) format
 +void read_ppm(Image&​ im, istream&​ in) {
 +  unsigned w,​h,​maxcolor;​
 +  string magic;
 +  ​
 +  in >> magic >> w >> h >> maxcolor;
 +  assert(magic == "​P3"​);​
 +  ​
 +  im.resize(extents[h][w][3]);​
 +  ​
 +  for(unsigned i=0; i<h; i++)
 +    for(unsigned j=0; j<w; j++)
 +      in >> im[i][j][R] >> im[i][j][G] >> im[i][j][B];​
 +}
 +</​code>​
 +
 +  * Imprimir uma imagem PPM plain
 +<code c++>
 +  cout << "P3 " << w << " " << h << " 255 " << endl;
 +  for(unsigned i=0; i<h; i++) {
 +    for(unsigned j=0; j<w; j++)
 +      cout << im[i][j][R] << " " << im[i][j][G] << " " << im[i][j][B] << " ";
 +      cout << endl;
 +  }
 +</​code>​
 +  * Converter qualquer imagem para PPM plain (usando {{http://​www.imagemagick.org|Image Magick}})
 +<​code>​
 +  convert -compress none myimage.ext myimage.ppm
 +</​code>​
 +
 +  * Determinar a probabilidade de pele ou não-pele (para obter valores inteiros multiplicar com p.ex. 10.000.000.000)
 +<code c++>
 +// mixture of Gaussians, according to Jones, Regh
 +const unsigned nG = 16;
 +const unsigned nV = 7;
 +double skin[nG][nV] = {
 + { 73.53, 29.94, 17.76, ​ 765.40, 121.44, 112.80, 0.0294 },
 + { 249.71, 233.94, 217.49, ​ 39.94, 154.44, 396.05, 0.0331 },
 + { 161.68, 116.25, 96.95, ​ 291.03, 60.48, 162.85, 0.0654 },
 + { 186.07, 136.62, 114.40, ​ 274.95, 64.60, 198.27, 0.0756 },
 + { 189.26, 98.37, 51.18, ​ 633.18, 222.40, 250.69, 0.0554 },
 + { 247.00, 152.20, 90.84, ​ 65.23, 691.53, 609.92, 0.0314 },
 + { 150.10, 72.66, 37.76, ​ 408.63, 200.77, 257.57, 0.0454 },
 + { 206.85, 171.09, 156.34, ​ 530.08, 155.08, 572.79, 0.0469 },
 + { 212.78, 152.82, 120.04, ​ 160.57, 84.52, 243.90, 0.0956 },
 + { 234.87, 175.43, 138.94, ​ 163.80, 121.57, 279.22, 0.0763 },
 + { 151.19, 97.74, 74.59, ​ 425.40, 73.56, 175.11, 0.1100 },
 + { 120.52, 77.55, 59.82, ​ 330.45, 70.34, 151.82, 0.0676 },
 + { 192.20, 119.62, 82.32, ​ 152.76, 92.14, 259.15, 0.0755 },
 + { 214.29, 136.08, 87.24, ​ 204.90, 140.17, 270.19, 0.0500 },
 + { 99.57, 54.33, 38.06, ​ 448.13, 90.18, 151.29, 0.0667 },
 + { 238.88, 203.08, 176.91, ​ 178.38, 156.27, 404.99, 0.0749 }
 +};
 +
 +double noskin[nG][nV] = {
 + { 254.37, 254.41, 253.82, ​ 2.77, 2.81, 5.46, 0.0637 },
 + { 9.39, 8.09, 8.52,  46.84, 33.59, 32.48, 0.0516 },
 + { 96.57, 96.95, 91.53, ​ 280.69, 156.79, 436.58, 0.0864 },
 + { 160.44, 162.49, 159.06, ​ 355.98, 115.89, 591.24, 0.0636 },
 + { 74.98, 63.23, 46.33, ​ 414.84, 245.95, 361.27, 0.0747 },
 + { 121.83, 60.88, 18.31, ​ 2502.24, 1383.53, 237.18, 0.0365 },
 + { 202.18, 154.88, 91.04, ​ 957.42, 1766.94, 1582.52, 0.0349 },
 + { 193.06, 201.93, 206.55, ​ 562.88, 190.23, 447.28, 0.0649 },
 + { 51.88, 57.14, 61.55, ​ 344.11, 191.77, 433.40, 0.0656 },
 + { 30.88, 26.84, 25.32, ​ 222.07, 118.65, 182.41, 0.1189 },
 + { 44.97, 85.96, 131.95, ​ 651.32, 840.52, 963.67, 0.0362 },
 + { 236.02, 236.27, 230.70, ​ 225.03, 117.29, 331.95, 0.0849 },
 + { 207.86, 191.20, 164.12, ​ 494.04, 237.69, 533.52, 0.0368 },
 + { 99.83, 148.11, 188.17, ​ 955.88, 654.95, 916.70, 0.0389 },
 + { 135.06, 131.92, 123.10, ​ 350.35, 130.30, 388.43, 0.0943 },
 + { 135.96, 103.89, 66.88, ​ 806.44, 642.20, 350.36, 0.0477 }
 +};
 +
 +double skin_value(Color R, Color G, Color B) {
 +  double r = 0;
 +  for(unsigned i=0; i<nG; i++) {
 +    double t;
 +    t = pow(double(R)-skin[i][0],​2)/​skin[i][3] + pow(double(G)-skin[i][1],​2)/​skin[i][4] + pow(double(B)-skin[i][2],​2)/​skin[i][5];​
 +    t = skin[i][6]*exp(-t/​2) / (pow(2*M_PI,​1.5) * sqrt(skin[i][3]*skin[i][4]*skin[i][5]));​
 +    r += t;
 +  }
 +  return r;
 +}
 +
 +double noskin_value(Color R, Color G, Color B) {
 +  double r = 0;
 +  for(unsigned i=0; i<nG; i++) {
 +    double t;
 +    t = pow(double(R)-noskin[i][0],​2)/​noskin[i][3] + pow(double(G)-noskin[i][1],​2)/​noskin[i][4] + pow(double(B)-noskin[i][2],​2)/​noskin[i][5];​
 +    t = noskin[i][6]*exp(-t/​2) / (pow(2*M_PI,​1.5) * sqrt(noskin[i][3]*noskin[i][4]*noskin[i][5]));​
 +    r += t;
 +  }
 +  return r;
 +}
 +</​code>​
 +
 +
 +==== Trabalho 5 (Sequenciamento de tarefas) ====
 +
 +Entrega: 12/12/2011
 +
 +=== Objetivos ===
 +  * Resolver o problema P||C_max com algoritmos de aproximação.
 +  * Implementar o sequenciamento em lista (2-aproximação)
 +  * Implementar o sequenciamento em lista em ordem não-crescente (4/​3-aproximação)
 +  * Implementar o esquema de aproximação em tempo polinomial
 +  * Comparar a qualidade dos algoritmos com a solução ótima
 +  * Compara o tempo de execução dos algoritmos com os limites teóricos e entre si.
 +
 +=== Casos de teste ===
 +  * Disponíveis em [[http://​www.or.deis.unibo.it/​research_pages/​ORinstances/​PCmax.htm]]
 +
 +=== Convenções ===
 +  * As implementações do algoritmo devem aceitar uma instância na entrada padrão (stdin) e o tempo de término obtido na saída padrão (stdout).
 +  * Para o esquema de aproximação,​ o primeiro argumento na linha de comando deve ser o parâmetro de qualidade epsilon.
  
inf05504/2011-2-trabalhos.1315248888.txt.gz · Esta página foi modificada pela última vez em: 2011/09/05 15:54 por marcus