Skip to content

Commit 657cce8

Browse files
committed
Melhor explicação além
1 parent 6d7dcef commit 657cce8

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

material/aulas/aula05/index.md

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,24 @@ Na aula passada você deveria ter sumido com os erros do código fornecido, e a
247247
??? note "Busca Exaustiva - Nivel além do horizonte"
248248
```cpp
249249
// Foi o Emil
250+
/*
251+
1. Primeira troca foi deixar de utilizar o algoritmo recursivo para utilizar
252+
um algoritmo iterativo, dessa forma o compilador consegue fazer maiores
253+
inferências para melhorar as otimizações;
254+
https://en.wikipedia.org/wiki/Heap%27s_algorithm
255+
ver: permutarItter
256+
257+
2. A segunda troca foi utilizar a técnica de "branchless programming" para o
258+
calculo do custo.
259+
Utilizar o operador ternário (? :) pode ser que se evite ramificação no
260+
assembly (CMOV - Conditional Move) e o erro de branch prediction.
261+
Outra técnica é utilizar operações bitwise quando possível.
262+
263+
3. A terceira troca e extramamente específica para nosso caso, nem sempre
264+
será possivel, é pré-calcular as distâncias que temos em nosso problema,
265+
assim trocamos um calculo matemático sqrt(u * u + v * v), lembrando que
266+
sqrt ainda é uma operação lenta, por um acesso direto à memoria.
267+
*/
250268
#include <algorithm>
251269
#include <chrono>
252270
#include <cmath>
@@ -255,9 +273,6 @@ Na aula passada você deveria ter sumido com os erros do código fornecido, e a
255273
#include <limits>
256274
#include <vector>
257275

258-
// 1. calcula custo Branchless
259-
// 2. precalculated matrix
260-
261276
using namespace std;
262277

263278
const int CAPACIDADE_MOTO = 5;
@@ -333,9 +348,6 @@ Na aula passada você deveria ter sumido com os erros do código fornecido, e a
333348
return custo;
334349
}
335350

336-
/*
337-
https://en.wikipedia.org/wiki/Heap%27s_algorithm
338-
*/
339351
static void permutarItter(const int motorista, const int coleta, vector<Ponto>& __restrict entregas,
340352
vector<int>& rota, int inicio, double &melhorCusto,
341353
vector<int>& melhorRota) {

0 commit comments

Comments
 (0)