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
zcmcbxi19`v;{*vI2SElfZ~&7G3=)<TwU%*Oa6q^g6L0F*FXV=BU^IgOgwM#pz`z1x
zDu4(E1_m^G3ll^fMkDKEV_;w?(1pks*rL)4p!!xo=*jJjf<g^YwGB|U4Yre4F`iS*
zfLe)8*Fa2UsF^&I$zKtdMH3(vFie=t$(%3J^k|EGgmhg<r)uQ2PLbU0oSQ12PVQmW
z5anfHU;z0Q<YoqjMzGPmlTR{-GZsz$$SgiNfW?DxGMKf2MPjl7iv;7W$q!lFSz8zw
z7?dV&WD=R|$eJ~IGi!f63j-qq69X#)6PRXWU}Rv2vR5)NfP=??fq|h^DwC6eft_J5
zRIGF2G&TkXW`>hsn?Y`2Vb~0n0||*|X7VyHurXYLiiv>vtPJ;{{4HSpEDSH|p#l&K
zn7|f*41h%dG}0Lqgg~MU3>DD8hKWCbrWFooVu6Xn_&4k!`al823}J%F2T<{PkOVlz
zfQ1<tUO**4;xNNNQXi1Sp@|P9%<uzA926^HK?Vkf8BlR{XiUMx7a)l<F))Dq50P4d
zB*6+10+Sn%#6gY%3o<Y;>_8F+SppM3fF#Zd6J%guIDsV21sCUMV7P!J!L#|G!e#bJ
z0z7j13=AHv2TGX!U+`!?!f_a^;lF8;J_Eyl)fD~7S^{15|5feu85q*|<y{yUKJ&}{
z`mcIU50!rmjlU0#zYUGQ4voJIjXw{W&-&}X>NLH{5rWEr44e!M|3!=S7#O~!>G8{h
zQaJ;IN3ZQnJrKn@2}D``C=vDOW(@<eTMv|Q{(rzP-vIK~VJPj<Ynus@>@`i&n|wx4
znn_h}@=HNkEmb{G2G9=mXtrenF+Dn;mhgCV+p_5~FuYj#@BjZ7DgXcfKgRl3cd~(y
zl5z7Jh0fYHoux1KYcMb{yg2>u|9_88*B>6;u0Og%-*gIq7{?tXKsN7ZU<Dg7Sz1I^
zybG-G5J=jiGXSj2<G6#u<Y*D?`o#ZWLq2#k*WO?#74qnI{ov6Z`oW_!Kmo*lUGCBC
zdc&jB^@YcA*B>C0J-S_AKy7{D(e0oBmIH}dyWS|_2FZ3aSh`-RzYb@XvVqKat?SWT
z`-7o`59|!66|Y4(K(=^vy50cO-Jvf)Hcy@-swr8|!@%Itd3*=R(ieGu|Nn<*bWoUl
zPgF-t!lT>uLAQeh;{}fy9tR&Vd2}9sVf1&hf|wYiz+`hV104xV*AF#^j=O#V>3?kv
za*ao~gFtua7mwsi9tR&WdGzvtg5p7UfW+j<Vk(vrmaboFc7lursRNm3{s(O71CQ>|
zAJBjUsRkJZvKbVh4>|)RCVvo9uK&ZpzyR{5N2lupkK?W%K(>PT;K1N-?Sx5#Ld??j
zMyVJ`5@gAi-~a!E{rGYxOiicji`P6LTTsFmrt=wCXE!*0z@Y`=+d`H80J{|&W!FHa
zJA<Mg%su|X`#0D-KVFA`J=qD0Y1aoJjg#+-D=W%?MIq+G;{O52jIY1I`fg1AC?+;J
zL4u!Om<uUpe*c<WCm|NO`PcvdX&(G_2hu$F^A5aV`ThU@Cw`p+ovtssU0-w_^XO&0
z&WWUJ%dh|ckGnnrRWvV;L;U@rn*pqDKeD=>Uz5K}So+r>i@8AE14@Ojr9FCCb0M-X
zxFHfhKwbh#f)WfU{NL0;6P<&C2Po{%OfHbrRnP^cd~k9HC*lv_1ZeGggTIyi|Ns9J
zCQLprD?0g-q!|Bc4kU-y{+#?>Qk_2nS<L<CWL+t7$x37~#h>6n1G{B%tdwGX03*nh
zy(j+t|KGXw2#B0|07Ulg`S<^Sibpq#DkxKfoNai(qq`NP&ZD#S!N33ikGEd=_y0dA
zLA@68=mrZxd<bQNscr_#R*-q6ce|&8Ozdt2+W`vrQ|t^39`&%Cl=}nZFt8qv&ej+I
z{{Me@0~`ThA!r=<fV9ALSpWF{zZ>j^-T=nVsUXLA%<$-*3UZrA=ai!#z-bJu-J{!q
zqnn|#^$ytCH~#(q4~pT}{vO?v<7A{cEL%ZNt5cpFBO@ORQq$ZDR@1x}M6uMZ!09~?
zYp_#Gbf79g-UXS(-y;l;MzHO0!Tx`f3uQ$D`q)504lO~<z7zJv1W<}e@z93EMG5PR
zkKg|PKY18b1BH5YKAn75R@w?w;6aL9220l`r7uBRJh}@&MahqD2Z>$}Mo<>)^pb#<
zOT8j&-L4NhnI^<e&X?C=+%|cRyhNsUx9^kg&^MqY*Le<<$6kMj6vHq<aOMSNqSvMT
z+g$J41ec0;hdu$T2TL6XC9h7`53j?((w?Pa-JvhKeIY8qCVv0-|Nm=?$qEXRnOFY&
z|NmMNtT3Qdusiet!W>pm5!YM#!lT#siAQhfeUDz(2cDfDJis~eCks;eZTkBEfAf$3
z{H@~up#>JmpD7;NBH)Bu!ulfN>*jR|MJ$sHtm<9;LV{d98B|jg+!Rz(6sj3iQ);<D
zTpt)$K{Xk~R80XjVx*a^L2Xz*P}}4E|Nk36>G8w=|Dbdk@!|h}P+@xG!~g#?7#J81
ze*FKRgOP#3`qTga8jK7K-#-2S@4?8x;PUzZ{|rV32KO)j|99vzGB9L*{r`UjBLl<3
zZ~y<FU}RvJ`u+d^7mN%HGk^a7&%wmN@crli{~F*X@nkVWC0UCP|NpCj@|X)dxWTW&
zz`$Sv;=lj@f5PNYL*@F6_y7Ncr9h$#3=AR+3=Aa<3=9eH|NjTq_E2#d1_p*61_p+W
zAO8QZ0*Sfu3A8ae^Rh7&^00F-Fo5LOFfcH1fBgS{H;ViwxcnIg28LxH|Nr+x$WInG
z;$?foz`$_j<76!(DK{QQ28QjQ{{L43<uI5P%#w^CGeB18FfuUg{QUoa1&Vw=T;7L~
zfkE)=<Srwr=p04{hNWNs|7QUO2i&ONaHTzr3=Ey$|NoCexQ3UFDHLQA#5ar#49CC!
z|8I<9l@>_<=7S0cxin!-Y*>>Tqz+^js2>2LVf@XLC)&yzO_2tPF)&C%C<a)A9V*NK
zYdcFp<tuC_KeE+h)R-)2C(rnKvZ0;6U<0(_3Gxs~)q%-{cJhK1(8es3V%RZxp`AaY
z#pI86@{BT*1?|(B8f+(TWD=V^!QNr=4SPdIhsj(H(-;dTFLV&EUjXe6fQ$oSV+IBW
zCI$fpn4dsmAnXZB&<s)x0?=*)%x|G!aWQx|1Edy&K?xsZ4lIm7Vj$cBRxb+k{bX}T
zN2U!*ldBx{j9}eDkTMX4G@*qVVEsan7zkej8zI5aU_bemV;HLzBLjoN<c&<ik~={x
zQ20XK2vQ8fZj%k2#0|q4LA^6cxDP-wARNcYz#zmV$N-BUkQfN3fOIj|gGk>=AT<mE
z3~|CB83qP$0%l-fSO68jC<+k=r%DC}hV4+h7|>jD1mr@HTk9`FbuNZ>)4*AVfq~&Z
zDE%@?GQhfH5OWzA-hjjzgy8*iSP$$s)Eq`=vH>S%1_lN;CI$u}1_1_7afk_9AQXcn
zL|lmBFH{1YJ3#&Z$$~E8^~Ow~K$2pRKy&zBs5P*W25_0ez`$SuRS!!RP+J&WAl5L%
zL!AZALktWIo>1}ipkfBpwT7mnP>8q?!y0G^GeaekLC!L)VPaqqWWtQQ4v01eO=u{B
z3nm5zhAER7UBwyKf%G!&pKRzV&UA}uvzMzf<K#xS$&;1cRW?VumorU1z{I-wf@cCF
zW58rXZ+$@xXfF~*f1X_EtuH78?L)%p$s4`(IW3@~7L#9kn{)1f@^(zt^f8BLNLa=^
zFuBmDo^itDk3RaG8=z(FhRK?~=93kC1sEG97y9ZWhH#+yF^FsOCSN@+SfZRFJ^7Wd
zxd3#e1U5*MHrdcmUl5i*V06voLO*?>7f`h@`V8abO@4Y@uu`W$ck(MgGp-6-NQ_nJ
zPS)}_<AP<u2HnY7{$}v<ra>Q~s$ud*e*;cf(lD6(%HJHu6EK*p6=2V3FgYv0o)a_x
h!oa}rfMxQg05dKLQ;6;dOp`wam@)k@pR5(A1^^;1JzM|)

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