TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
TCodificacaoBinaria.h
Go to the documentation of this file.
1#pragma once
3
4// nomes dos parâmetros fixos na codificação binária
9
10// classe para permitir referência a um bit, para leitura e escrita
11class BitRef {
12 uint64_t& word;
13 uint64_t mask;
14public:
15 BitRef(uint64_t& w, uint64_t m) : word(w), mask(m) {}
16 // conversão para leitura
17 operator bool() const { return (word & mask) != 0; }
18 // atribuição para escrita
19 BitRef& operator=(bool v) {
20 if (v) word |= mask;
21 else word &= ~mask;
22 return *this;
23 }
24 // atribuição de outro BitRef
25 BitRef& operator=(const BitRef& other) {
26 return *this = bool(other); // reutiliza o operador=(bool)
27 }
28};
29
30
33{
34public:
37
38 TVector<uint64_t> estado; // codificação binária (em números de 64 bits)
39 static int nElementos; // número de elementos binários na codificação
40
41 // TODO:
42 // - reformular para utilizar TBits (em TVetor.h), removendo BitRef
43
44 // troca o bit i
45 void Troca(int i) { estado[i >> 6] ^= ((uint64_t)1 << (i & 63)); }
46 // acesso a um bit para atribuir
47 BitRef Bit(int i) { return BitRef(estado[i >> 6], uint64_t(1) << (i & 63)); }
48 // acesso a um bit para ler
49 bool Bit(int i) const { return (estado[i >> 6] & ((uint64_t)1 << (i & 63))) != 0; }
50
51 // métodos necessários redefinir
52 TPonto Duplicar(void) = 0;
53 int Avaliar(void) = 0;
54
55 // deve carregar a instância, para variáveis estáticas, da subclasse
56 // definir valores globais: nElementos
57 void Inicializar(void)=0;
58
59 // métodos que podem ser redefinidos
60 void Debug(bool completo = true) override;
61
62 // métodos que não se prevê que sejam redefinidos
63 void Copiar(TPonto objeto);
64 void NovaSolucao(void);
65 void ResetParametros();
66 // operadores melhorativos
68 void Mutar(void);
69 void Cruzamento(TPonto a, TPonto b);
70 int Distancia(TPonto a);
71
72 using TProcura::Debug;
73};
74
ECodificacaoBinaria
@ PARAMETROS_CB
@ TIPO_VIZINHO_CB
@ TIPO_CRUZAR_CB
@ TIPO_MUTAR_CB
@ PARAMETROS_MELHORATIVA
BitRef & operator=(bool v)
BitRef & operator=(const BitRef &other)
BitRef(uint64_t &w, uint64_t m)
int Avaliar(void)=0
void Inicializar(void)=0
Coloca o objeto no estado inicial da procura.
void Vizinhanca(TVector< TPonto > &vizinhos)
void ResetParametros()
Inicializa os parâmetros, indicadores e instâncias.
void Copiar(TPonto objeto)
Fica com uma cópia do objeto.
void Debug(bool completo=true) override
Mostra o estado no ecrã, para debug.
bool Bit(int i) const
TVector< uint64_t > estado
void Cruzamento(TPonto a, TPonto b)
TPonto Duplicar(void)=0
Cria um objeto que é uma cópia deste.
virtual void Debug(bool completo=true)
Mostra o estado no ecrã, para debug.
Definition TProcura.cpp:89
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:575