Quando se trata do design de algoritmos, geralmente se emprega as seguintes técnicas:
- Programaçao dinamica
- A estratégia gananciosa
- Dividir e conquistar
Enquanto para os dois primeiros métodos, existem fundamentos teóricos bem conhecidos, a saber, o Princípio de Optimalidade de Bellman e a teoria matróide (resp. Greedoide), não consegui encontrar uma estrutura geral para algoritmos baseados em D&C.
Em primeiro lugar, estou ciente de algo que nós (ou melhor, o prof) introduzimos em uma classe de programação funcional, chamada "esqueleto algorítmico", que surgiu no contexto de combinadores. Como exemplo, demos um esqueleto para os algoritmos de D&C da seguinte maneira:
Definição : Seja conjuntos não vazios. Chamamos os elementos de soluções , e os elementos de (ou seja, os subconjuntos de ) são chamados de problemas . Então, um esqueleto de D & C é uma tupla de quatro , onde:S P : = P ( A ) A ( P β , β , D , C )
- é um predicado sobre o conjunto de problemas e dizemos que um problema é básico se mantiver.
- é um mapeamento que designa uma solução para cada problema básico.
- é um mapeamento que divide cada problema em um conjunto de subproblemas.
- é um mapeamento que une as soluções (dependendo do tipo de um "problema de pivô") dos subproblemas para produzir uma solução.
Então, para um determinado esqueleto e um problema , a seguinte função genérica calcula uma solução (no formato formal sentido) para :p f s : P → S p
onde na segunda linha usamos a notação para os subconjuntos do codomain de um mapeamento .X f
No entanto, não examinamos mais as propriedades "estruturais" subjacentes dos problemas que podem ser formuladas dessa maneira (como eu disse, era uma classe de programação funcional e esse era apenas um pequeno exemplo). Infelizmente, não consegui encontrar mais referências sobre essa mesma abordagem. Portanto, não acho que as definições acima sejam bastante padrão. Se alguém reconhecer o que afirmei acima, ficaria feliz com os artigos relacionados.
Em segundo lugar, para a estratégia gananciosa, temos o famoso resultado de que um problema é corretamente resolvido pelo algoritmo ganancioso geral, se e somente se suas soluções constituírem um matróide ponderado. Existem resultados semelhantes para os algoritmos de D&C (não necessariamente com base no método descrito acima)?