Biblioteca de programas
O website do livro de Sedgewick e Wayne
tem uma rica biblioteca de classes Java
que inclui todos os programas discutidos no livro.
Também inclui muitos arquivos de dados interessantes.
Instale a biblioteca
-
Siga as intruções que estão no
website do livro de Sedgewick e Wayne
para baixar e instalar o ambiente de programação do livro
no seu computador.
-
Ajuste a variável de ambiente (environment variable)
classpath
do seu sistema.
Veja como fazer isso no meio da
página apropriada
do website do livro.
No Linux, o classpath é
'.:/home/XXX/algs4/stdlib.jar:/home/XXX/algs4/algs4.jar'
e no Windows é
".;C:\Users\XXX\algs4\algs4.jar;C:\Users\XXX\algs4\stdlib.jar"
sendo XXX/algs4/
o diretório onde você colocou o material que baixou do
website do livro.
(No caso do Windows,
o instalador algs4.exe faz isso para você automaticamente.)
-
(Como a documentação da biblioteca de classes do livro
tem algumas lacunas e defeitos,
copiei o pacote todo (em novembro de 2013)
e melhorei parte da documentação.)
-
Você deve também copiar o pacote de dados de teste
algs4-data.zip
da página apropriada
do website do livro.
Descompacte o pacote no seu diretório
XXX/algs4-data/.
Checkstyle e findbugs
Para verificar se está tudo funcionando
-
Crie um diretório de trabalho.
Copie o arquivo
XXX/algs4/BinarySearch.java para o diretório de trabalho.
-
Copie os arquivos de teste
tinyW.txt,
tinyT.txt,
largeW.txt e
largeT.txt
do diretório XXX/algs4-data/
para o diretório de trabalho.
-
Para saber o que há em tinyW.txt, use o utilitário more.
(No Linux, você também pode usar cat e less
no lugar de more.
No Windows, experimente type.)
% more tinyW.txt
84
48
68
10
18
98
12
23
54
57
48
33
16
77
11
29
-
O programa BinarySearch é um filtro:
ele imprime os números fornecidos na entrada padrão
que não estiverem no arquivo
indicado pelo argumento da linha de comando.
Aqui está o código:
import java.util.Arrays;
public class BinarySearch {
public static int rank(int key, int[] a) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
public static void main(String[] args) {
In in = new In(args[0]);
int[] whitelist = in.readAllInts();
Arrays.sort(whitelist);
while (!StdIn.isEmpty()) {
int key = StdIn.readInt();
if (rank(key, whitelist) == -1)
StdOut.println(key);
}
}
}
-
Compile e execute BinarySearch:
% javac BinarySearch.java
% java BinarySearch tinyW.txt < tinyT.txt
50
99
13
-
Repita com largeW.txt e largeT.txt.
-
Exercício:
Modifique o código de main() em BinarySearch.java
para que o programa diga
- quantos números o primeiro arquivo tem,
- quantos números do segundo arquivo
não estão no primeiro.