Untitled

 avatar
unknown
java
4 years ago
11 kB
5
Indexable
package Trabalho_AV3;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;

public class ArvoreBinariaBusca {
    public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    static class Nodo {

        public String elemento;
        public Nodo esquerdo;
        public Nodo direito;

        public Nodo(String elemento) {
            this.elemento = elemento;
            this.esquerdo = null;
            this.direito = null;
        }
    }

    public Nodo raiz;
    public int nElementos;
    public int contador = 0;

    public ArvoreBinariaBusca() {
        this.raiz = null;
        this.nElementos = 0;
    }

    public int tamanho() {
        return this.nElementos;
    }

    public boolean estaVazia() {
        return this.raiz == null;
    }

    public void imprimePreOrdem() {
        this.preOrdem(this.raiz);
        System.out.println();
    }

    public void imprimePosOrdem() {
        this.posOrdem(this.raiz);
        System.out.println();
    }

    public void imprimeEmOrdem() {
        this.emOrdem(this.raiz);
        System.out.println();
    }

    public void preOrdem(Nodo nodo) {

        if (nodo == null)
            return;

        System.out.print(nodo.elemento + " ");
        this.preOrdem(nodo.esquerdo);
        this.preOrdem(nodo.direito);
    }

    public void posOrdem(Nodo nodo) {

        if (nodo == null)
            return;

        this.posOrdem(nodo.esquerdo);
        this.posOrdem(nodo.direito);
        System.out.print(nodo.elemento + " ");
    }

    public void emOrdem(Nodo nodo) {

        if (nodo == null)
            return;

        this.emOrdem(nodo.esquerdo);
        System.out.print(nodo.elemento + " ");
        this.emOrdem(nodo.direito);
    }

    public void insere(String elemento) {
        this.insere(elemento, this.raiz);
    }

    public void insere(String elemento, Nodo nodo) {

        Nodo novo = new Nodo(elemento);

        if (nodo == null) {
            this.raiz = novo;
            this.nElementos++;
            return;
        }

        if (elemento.compareTo(nodo.elemento) < nodo.elemento.compareTo(elemento)) {
            if (nodo.esquerdo == null) {
                nodo.esquerdo = novo;
                this.nElementos++;
                return;
            } else {
                this.insere(elemento, nodo.esquerdo);
            }
        }

        if (elemento.compareTo(nodo.elemento) > nodo.elemento.compareTo(elemento)) {
            if (nodo.direito == null) {
                nodo.direito = novo;
                this.nElementos++;
                return;
            } else {
                this.insere(elemento, nodo.direito);
            }
        }
    }

    private Nodo maiorElemento(Nodo nodo) {
        while (nodo.direito != null) {
            nodo = nodo.direito;
        }
        return nodo;
    }

    private Nodo menorElemento(Nodo nodo) {
        while (nodo.esquerdo != null) {
            nodo = nodo.esquerdo;
        }
        return nodo;
    }

    public boolean busca(String elemento) {
        return this.busca(elemento, this.raiz);
    }

    private boolean busca(String elemento, Nodo nodo) {
        if (nodo == null) {
            return false;
        }
        if (elemento.compareTo(nodo.elemento) < 0) {
            return this.busca(elemento, nodo.esquerdo);
        } else if (elemento.compareTo(nodo.elemento) > 0) {
            return this.busca(elemento, nodo.direito);
        } else {
            return true;
        }
    }
    public int buscaLinha(){
        return contador;
    }
}
class Hash{
    static class Nodo{
        public Nodo prox, ant;
        public String elemento;

        public Nodo(String elemento){
            this.elemento = elemento;
            this.prox = null;
            this.ant = null;
        }
    }
    public Nodo primeiro;
    public Nodo ultimo;
    public Nodo[] tabela;
    public int tamanho;

    public Hash(int tam_tabela){
        primeiro = null;
        ultimo = null;
        tabela = new Nodo[tam_tabela];
        tamanho = 0;
    }

    public String insert(String valor) throws Exception {

        //int pos = hash(valor);
        //int pos = toHashKey(valor) % tabela.length;
        int hash = toHashKey(valor);
        int pos = baseHash(hash, tabela.length);
        //int pos = Math.abs(valor.hashCode()) % tabela.length;

        Nodo node = new Nodo(valor);
        Nodo start = tabela[pos];

        if (tabela[pos] == null) {
            tabela[pos] = node;
        }
        else {
            node.prox = start;
            start.ant = node;
            tabela[pos] = node;
        }
        return node.elemento;
    }

    private int hash(String x)
    {
        int valor_hash = x.hashCode();

        valor_hash %= tabela.length;

        if (valor_hash < 0)
            valor_hash += tabela.length;

        return valor_hash;
    }

    int toHashKey(String s)
    {
        int A = 1952786893;
        int B = 367257;
        int v = B;
        for (int j = 0; j < s.length(); j++)
        {
            char c = s.charAt(j);
            v = A * (v + (int) c + j) + B;
        }

        if (v < 0) v = -v;
        return v;
    }

    int baseHash(int hashKey,int length)
    {
        double constant = (Math.sqrt(3) - 1);
        int base =  (int) Math.floor((length * ((constant* hashKey) - Math.floor(constant* hashKey))));
        return base;
    }

    public void mostra() throws Exception {
        for(int i = 0; i < tabela.length; i++){
            Nodo aux = tabela[i];
            while (aux != null){
                if(aux.elemento != null){
                    System.out.print(aux.elemento);
                    //return aux.elemento;
                }
                aux = aux.prox;
                System.out.println();
            }
        }
        //return null;
    }
}
class Hash_Int{
    static class No{
        public int dado;
        public No anterior;
        public No proximo;

        public No(int dado){
            this.dado = dado;
            this.anterior = null;
            this.proximo = null;
        }
    }

    public No primeiro;
    public No ultimo;

    public No[] tabela;
    public int tamanho;

    Hash_Int(int tamanho_hash){
        primeiro = null;
        ultimo = null;
        tabela = new No[tamanho_hash];
        tamanho = 0;
    }

    public boolean estaVazia(){
        return tamanho == 0;
    }

    public int getTamanho(){
        return tamanho;
    }

    public void adicionar(int valor){
        No novo = new No(valor);
        int pos = funcao_hashing(valor);
        No aux = tabela[pos];

        if(tabela[pos] == null){ //lista vazia
            tabela[pos] = novo;
            ultimo = novo;
        }
        else if (novo.dado <= tabela[pos].dado){
            novo.proximo = aux;
            aux.anterior = novo;
            tabela[pos] = novo;
        }
//        else if (novo.dado >= ultimo.dado){
//            tabela[pos].proximo = novo;
//            ultimo = novo;
//        }
        else{
            No anterior = null;
            No atual = tabela[pos];
            while (atual.proximo != null && atual.proximo.dado < novo.dado){
                atual = atual.proximo;
            }
            novo.proximo = atual.proximo;
            if(atual.proximo != null){
                novo.proximo.anterior = novo;
            }
            atual.proximo = novo;
            novo.anterior = atual;
        }
        tamanho++;
    }

    private int h(int valor){
        int hash = valor % tabela.length;
        hash %= tabela.length;
        if(hash < 0){
            hash += tabela.length;
        }
        return hash;
    }

    private int funcao_hashing(int valor){
        return valor % tabela.length;
    }
}
class AppMain{
    public static int contadorLinha(String text){
        return text.split("\r\n").length;
    }
    public static String lerArquivoString(String fileName)throws Exception {
        String dado = "";
        dado = new String(Files.readAllBytes(Paths.get(fileName)));
        return dado;
    }
    public static int contador_index(String regex) throws Exception {
        String dado = lerArquivoString("C:\\Users\\bruno\\Desktop\\test.txt");
        String[] str = dado.split(String.valueOf(regex));
        return str.length - 1;
    }

    public static void palavra_chave(String diretorio) throws Exception {
        String dado = lerArquivoString(diretorio);
        String[] slice = dado.split("[ ,.$\r\n]");
        for(int i = 0; i < slice.length; i++){
            ArvoreBinariaBusca g = new ArvoreBinariaBusca();
            g.insere(slice[i]);
            g.imprimeEmOrdem();
        }
    }

    public static void indice_remissivo(String dir_entrada, String dir_pc) throws Exception {
        String palchave = lerArquivoString(dir_pc);
        String dado = lerArquivoString(dir_entrada);

        String[] pc_split = palchave.split("[ ,.$\r\n]");
        String[] slice = dado.split("\r\n");

        for(int k = 0; k < pc_split.length; k++){

            for(int i = 0; i < slice.length ; i++){ //linhas

                String[] col = slice[i].split("[ ,.$]"); //colunas

                for(int j = 0; j < col.length; j++){

                    Hash h = new Hash(col.length);
                    ArvoreBinariaBusca e = new ArvoreBinariaBusca();

                    if(col[j] != "" || pc_split[k] != ""){
                        e.insere(col[j]);
                        h.insert(pc_split[k]);
                    }

                    if(e.busca(h.insert(pc_split[k]))){ //se achou o valor
                        System.out.println(pc_split[k]+" "+(i+1));
                    }
                }
                //System.out.println();
            }
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Hash h = new Hash(26);
        ArvoreBinariaBusca a = new ArvoreBinariaBusca();
        indice_remissivo("C:\\Users\\bruno\\Desktop\\test2.txt","C:\\Users\\bruno\\Desktop\\pc2.txt");
        //palavra_chave("C:\\Users\\bruno\\Desktop\\pc.txt");
    }
}
Editor is loading...