>> (p.1)
    Author Topic: O problema do conflito/dependência entre transações  (Read 149 times)
    wilwxk (OP)
    Sr. Member
    ****
    Offline

    Activity: 476
    Merit: 314


    View Profile
    May 07, 2018, 01:53:06 AM
    Last edit: May 07, 2018, 12:42:47 PM by wilwxk
    Merited by alexrossi (2)
     #1

    Grande correlação com o problema do knapsack, leia antes aqui, e se não gostou, não tente continuar a ler este.
    No fundo este problema é muito menos importante e menos discutido do que o problema do knapsack, mas mesmo assim vale a pena dar uma olhada.





    Segundo a Wikipedia:
         "Na teoria dos grafos, um conjunto independente de um grafo G é um conjunto S de vértices de G tal que não existem dois vértices adjacentes contidos em S. Em outras palavras, se a e b  são vértices quaisquer de um conjunto independente, não há aresta entre a e b. [...]  Se S é um conjunto independente de G e não existe um conjunto independente de G maior que S, diz-se que S é um conjunto independente máximo de G."

         Provavelmente você não entendeu a explicação nada simples acima, então resumindo o problema: o nome do problema é conjunto independente máximo (maximum independent set problem) e se resume a um grafo, que é um monte de vértices e arestas juntos, um conjunto independente é aquele que não existem dois vértices "vizinhos" (compartilhando uma mesma aresta) no conjunto, e queremos escolher um conjunto independente tal que maximize seu tamanho. Na imagem acima, as bolinhas coloridas são os vértices, os traços pretos são as arestas, e representa 1 grafo e 6 modos diferentes de escolher conjuntos independentes (apenas os vermelhos) nesse grafo, e apenas 2 são soluções para este problema (tente descobrir quais são).

         Este problema também é um problema NP-completo, igual o knapsack, e agora que você provavelmente entendeu os dois problemas, vai um fato curioso: existem 21 problemas nessa classificação, todos bastante diferentes assim como este em relação ao problema do knapsack, e mesmo assim, resolvendo um deles você automaticamente está resolvendo todos ao mesmo tempo.



    Certo, e o que isso tem a ver com o Bitcoin ?
         É possível separar o problema em duas partes, ambos relacionados a incluir a transação no bloco:

         1) Conflito entre transações tentativas de gasto duplo: Se existem várias transações tentando usar o mesmo dinheiro dizemos que as transações estão conflitando entre si, e então criamos um grafo onde cada vértice é uma transação e cada aresta entre A e B quer dizer que A e B estão em conflito entre si. E então apenas resolvemos o problema descrito acima (maior conjunto = mais transações = quase_sempre_mais_dinheiro).

         2) Transações que dependem do saldo de uma outra transação não confirmada: Nesse caso o problema é de dependência, se a transação B usa o dinheiro da transação A, ambas não confirmadas, e eu quiser colocar a transação B no bloco, eu devo colocar a A obrigatoriamente. Colocar este problema junto com o item 1) em um grafo exige um pouco mais de teoria, mas acredite quando eu digo que este problema fica mais fácil se "incorporado" ao item 1) .

         Então basicamente o problema com as transações agora é questão de bloco válido ou não, e não apenas uma questão de lucro adicional como tínhamos no problema do knapsack.



    Certo, e como se resolve isso ?
         Um ponto muito importante nisso tudo é que devemos lembrar que transações de gasto duplo são extremamente raras (os nodes/carteiras já têm um sistema que impede de ficar recebendo/mandando um monte de transações de gasto duplo). E sobre as dependências entre transações temos que elas são mais simples de calcular se você não tiver o problema de conflito (gasto duplo), bastando que se a B depende da A o minerador trata a B como se fosse um "A+B" (bytes A + bytes B + fee A + fee B), o que na verdade faz com que o knapsack problem fique um pouco mais difícil, mas o algoritmo guloso simplesmente ignora isso.
         Então diferentemente do problema do knapsack, onde os mineradores simplesmente faziam uma escolha simples que já rende um lucro próximo ao máximo, o maximum independent set problem pode ser simplesmente calculado com algum algoritmo lento, já que os números são muito baixos.



    Conclusão
         Este é um problema NP-completo que os mineradores simplesmente não resolveram, simplesmente a ignoraram e mesmo assim temos a solução perfeita. Quem sabe se um dia o mesmo conseguirem fazer o mesmo em relação ao knapsack problem ?



    parte um pouquinho mais técnica para os curiosos:



    Eu acho que este post já possui informação demais pra ser absorvida, se quiser mais mesmo leia mais nos links abaixo.




    Fontes:
    https://pt.wikipedia.org/wiki/Conjunto_independente
    https://en.wikipedia.org/wiki/Maximal_independent_set
    https://freedom-to-tinker.com/2014/10/27/bitcoin-mining-is-np-hard/
    Pages: [1]
      Print  
Page 1
Viewing Page: 1