From 765434684613c33533e8a8e5aa64e5e3980a69f5 Mon Sep 17 00:00:00 2001 From: Eduardo Souza <eduardomsouza@ufpr.br> Date: Mon, 28 Oct 2024 17:40:44 -0300 Subject: [PATCH] =?UTF-8?q?[ADD]=20Rascunho=20da=20inser=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20chaves=20e=20do=20lookup=5Ftable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a.out | Bin 16600 -> 20816 bytes t2.c | 149 ++++++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 119 insertions(+), 30 deletions(-) diff --git a/a.out b/a.out index de6ef6253ca9ce973828b56682fce5d0dbe456b3..1fbd779e432f2e38888994a22274d7ae67d21dee 100644 GIT binary patch literal 20816 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 M4N@?NLbw?E0r=;chX4Qo delta 4796 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 diff --git a/t2.c b/t2.c index de73b1e..47928af 100644 --- a/t2.c +++ b/t2.c @@ -9,9 +9,11 @@ typedef struct Node { int id; int *finger; //array para a tabela finger + int tam_finger; int *keys; //array para as chaves armazenadas int key_count; struct Node* next; + struct Node* prev; } Node; typedef struct DHT { @@ -19,6 +21,27 @@ typedef struct DHT { int max_id; } DHT; +void redistribute_keys(Node* new_node) { + Node* current = new_node; + do { + Node* next_node = current->next; + // Transferir chaves que são menores ou iguais ao id do próximo nó + for (int i = 0; i < current->key_count; i++) { + if ((current->keys[i] > current->id && current->keys[i] <= next_node->id) || + (current->id > next_node->id && (current->keys[i] > current->id || current->keys[i] <= next_node->id))) { + next_node->keys[next_node->key_count++] = current->keys[i]; + // Remover a chave do nó atual + for (int j = i; j < current->key_count - 1; j++) { + current->keys[j] = current->keys[j + 1]; + } + current->key_count--; + i--; // Reavaliar a posição atual + } + } + current = next_node; + } while (current != new_node); +} + // Função para criar um novo nó Node* create_node(int id, int max_id) { Node* node = (Node*)malloc(sizeof(Node)); @@ -28,6 +51,7 @@ Node* create_node(int id, int max_id) { //O tamanho do array de chave é calculado por id - 1 < k <= id node->keys = (int*)malloc((id - 1)*sizeof(int)); node->next = NULL; + node->prev = NULL; return node; } @@ -36,26 +60,40 @@ Node *insert_node(Node *head, int id, int max_id) { Node* new_node = create_node(id, max_id); if (head == NULL) { new_node->next = new_node; + new_node->prev = new_node; return new_node; } - Node* current = head; Node* prev = NULL; + + // Caso especial: inserir antes do nó cabeça + if (id < head->id) { + // Encontrar o último nó para atualizar seu ponteiro + Node* last = head; + while (last->next != head) { + last = last->next; + } + last->next = new_node; + new_node->next = head; + new_node->prev = last; + head->prev = new_node; + redistribute_keys(new_node); + return new_node; // Novo nó se torna a nova cabeça + } + + // Inserir em posição ordenada do { prev = current; current = current->next; } while (current != head && current->id < id); - if (current->id == id) { - return head; - } - - if (prev) { - prev->next = new_node; - } else { - head = new_node; - } + prev->next = new_node; new_node->next = current; + new_node->prev = prev; + current->prev = new_node; + + redistribute_keys(new_node); + return head; } @@ -103,6 +141,7 @@ Node* remove_node(Node* head, int id) { last = last->next; } last->next = head->next; + head->next->prev = last; Node* new_head = head->next; transfer_keys(head, new_head); free(head); @@ -118,6 +157,8 @@ Node* remove_node(Node* head, int id) { if (current->id == id) { prev->next = current->next; + current->next->prev = prev; + transfer_keys(current, current->next); free(current); } @@ -130,6 +171,7 @@ void calculate_finger_table(Node* head, int max_id) { Node* current = head; printf("Max_id:%d\n", max_id); int log2_max_id = ceil(log2(max_id)); + current->tam_finger = log2_max_id; printf("Log2_max_id:%d\n", log2_max_id); do { for (int k = 1; k <= log2_max_id; k++) { @@ -163,7 +205,8 @@ void print_finger_table(Node* head, int timestamp) { // Função para realizar lookup de uma chave -void lookup(Node* head, int timestamp, int node_id, int key) { +void lookup(Node* head, int timestamp, int node_id, int key){ + printf("ENTREI\n"); Node* current = head; Node* nodes_involved[TAM_MAX_FINGER]; int nodes_count = 0; @@ -173,37 +216,82 @@ void lookup(Node* head, int timestamp, int node_id, int key) { } printf("%d L %d {", timestamp, key); - Node* start = current; - while (!(current->id - 1 < key && key <= current->id)) { - printf("%d -> ", current->id); - nodes_involved[nodes_count++] = current; - int closest_node = current->finger[0]; - for (int i = 1; i < log2(TAM_MAX_FINGER); i++) { - if (current->finger[i] < key) { - closest_node = current->finger[i]; + Node* start = current; //Meu nó partida + int id_aux = current->id; + printf("%d,", current->id); + + while(1){ + int found = 0; + for (int i = 0; i < current->key_count; i++) { + if (current->keys[i] == key) { + printf("%d}\n", current->id); + return; } } - current = current->next; - if (current == start) { - break; // Prevent infinite loop + //Procura o maior nó conhecido pela finger_table que precede o valor da chave + for (int i = 0; i < current->tam_finger; i++) { + if (current->finger[i] < key && current->finger[i] > id_aux) { + printf("%d,", current->finger[i]); + id_aux = current->finger[i]; + found = 1; + + } + //Se não encontrar um nó na tabela finger que preceda o valor da chave, sai do loop + if(!found){ + break; + } + + // Mover para o nó com ID id_aux + while(current->id != id_aux){ + current = current->next; } + nodes_involved[nodes_count++] = current; //Adiciona o nó atual ao array de nós envolvidos + + //Verificar se o nó atual já tem a chave + for (int i = 0; i < current->key_count; i++) { + if (current->keys[i] == key) { + printf("%d}\n", current->id); + return; + } + } + + start = current; } printf("%d}\n", current->id); nodes_involved[nodes_count++] = current; - - // Print finger tables of nodes involved in the lookup - // for (int i = 0; i < nodes_count; i++) { - // print_finger_table(head, timestamp, nodes_involved[i]->id); - // } + } } -// Função para adicionar uma chave a um nó +// Função para adicionar uma chave a um nó respeitando o limite de um nó guarda as chaves maiores que seu antecessor e menores e iguais a ele. void insert_key(Node* head, int node_id, int key) { - Node* current = head; + Node* current = head; //Lista circular + + //Procuramos o nó com o id igual ao node_id while (current->id != node_id) { current = current->next; } - current->keys[current->key_count++] = key; + do{ + if ((current->id < current->next->id && key > current->id && key <= current->next->id) || + (current->id > current->next->id && (key > current->id || key <= current->next->id))) { + current->next->keys[current->next->key_count++] = key; + printf("Chave %d inserida no nó %d\n", key, current->id); + return; + } + current = current->next; + } while (current != head); + +} + +void imprime_chaves(Node* head) { + Node* current = head; + do { + printf("%d -> ", current->id); + for (int i = 0; i < current->key_count; i++) { + printf("%d ", current->keys[i]); + } + printf("\n"); + current = current->next; + } while (current != head); } // Função principal para testar a inserção de nós @@ -227,6 +315,7 @@ int main() { } else if (op == 'L') { lookup(dht, timestamp, id, key); } else if (op == 'P'){ + imprime_chaves(dht); print_finger_table(dht, timestamp); } } -- GitLab