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 // troca o bit i
42 void Troca(int i) { estado[i >> 6] ^= ((uint64_t)1 << (i & 63)); }
43 // acesso a um bit para atribuir
44 BitRef Bit(int i) { return BitRef(estado[i >> 6], uint64_t(1) << (i & 63)); }
45 // acesso a um bit para ler
46 bool Bit(int i) const { return (estado[i >> 6] & ((uint64_t)1 << (i & 63))) != 0; }
47
48 // métodos necessários redefinir
49 TPonto Duplicar(void) = 0;
50 int Avaliar(void) = 0;
51
52 // deve carregar a instância, para variáveis estáticas, da subclasse
53 // definir valores globais: nElementos
54 void Inicializar(void)=0;
55
56 // métodos que podem ser redefinidos
57 void Debug(bool completo = true) override;
58
59 // métodos que não se prevê que sejam redefinidos
60 void Copiar(TPonto objecto);
61 void NovaSolucao(void);
62 void ResetParametros();
63 // operadores melhorativos
65 void Mutar(void);
66 void Cruzamento(TPonto a, TPonto b);
67 int Distancia(TPonto a);
68
69 using TProcura::Debug;
70};
71
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 objecto no estado inicial da procura.
void Vizinhanca(TVector< TPonto > &vizinhos)
void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
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)
void Copiar(TPonto objecto)
Fica com uma cópia do objecto.
TPonto Duplicar(void)=0
Cria um objecto que é uma cópia deste.
virtual void Debug(bool completo=true)
Mostra o estado no ecrã, para debug.
Definition TProcura.cpp:93
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:493