{"id":16967311,"url":"https://github.com/tgentil/busca-em-profundidade","last_synced_at":"2025-08-04T08:38:18.193Z","repository":{"id":155365658,"uuid":"627526719","full_name":"Tgentil/busca-em-profundidade","owner":"Tgentil","description":"Este projeto implementa um algoritmo de busca em profundidade para encontrar um subconjunto de números de uma lista que soma um valor específico.","archived":false,"fork":false,"pushed_at":"2024-12-19T14:45:49.000Z","size":38,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T08:43:31.278Z","etag":null,"topics":["bfs-algorithm","breadth-first-search","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tgentil.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-13T16:46:14.000Z","updated_at":"2024-12-19T14:46:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"fd39ace3-82d6-4e84-9162-17c647e68be8","html_url":"https://github.com/Tgentil/busca-em-profundidade","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tgentil%2Fbusca-em-profundidade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tgentil%2Fbusca-em-profundidade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tgentil%2Fbusca-em-profundidade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tgentil%2Fbusca-em-profundidade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tgentil","download_url":"https://codeload.github.com/Tgentil/busca-em-profundidade/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244844530,"owners_count":20519790,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bfs-algorithm","breadth-first-search","python"],"created_at":"2024-10-14T00:08:16.144Z","updated_at":"2025-03-21T18:15:58.236Z","avatar_url":"https://github.com/Tgentil.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projeto de Soma de Subconjuntos\n\n [![GitHub](https://img.shields.io/badge/Visit-My%20Profile-0891B2?style=flat-square\u0026logo=github)](https://github.com/Tgentil)\n\nEste projeto implementa um algoritmo de busca em profundidade para encontrar um subconjunto de números de uma lista que soma um valor específico.\n\n## Motivação\nCriei este script porque desejava verificar se uma lista com vários lançamentos de vendas que compõem vários lotes de lançamentos continham um lote específico.\n\n## Estrutura do Projeto\n\nO projeto está estruturado da seguinte maneira:\n\n``` bash\nbusca_em_profundidade\n├── archive\n│   ├── debug\n│   │   └── debug_teste.py\n│   └── teste.py\n└── project\n    ├── code\n    │   └── achar_soma.py\n    └── test\n        ├── debug\n        │   └── debug_achar_soma.py\n        └── generator\n            └── gerador_de_numeros.py\n```\n\nO diretório `archive` contém o primeiro protótipo desenvolvido durante o projeto. O código presente nesta pasta tem uma eficiência bem reduzida em comparação ao código encontrado na pasta `project`.\n\nAo longo do desenvolvimento, foi necessário refatorar e otimizar o código na pasta `archive` para melhorar sua eficiência e escalabilidade.\n\nO diretório `project` contém o código-fonte (`achar_soma.py`) e uma pasta de teste que contém um script de debug (`debug_achar_soma.py`) e um gerador de números para teste do script principal (`gerador_de_numeros.py`) a pasta `Project` representa a versão mais atualizada e eficiente da solução. Ele foi aprimorado com base nos resultados obtidos a partir do protótipo inicial e é capaz de lidar com um volume de dados muito maior. Além disso, ele incorpora funcionalidades adicionais e melhorias de desempenho.\n\nEm resumo, a pasta `archive` contém o código original do primeiro protótipo, que pode ser útil para fins de referência, mas não é recomendado para uso atual devido à sua baixa eficiência. Recomendo o uso do código encontrado na pasta `project`, que representa a versão mais atualizada e eficiente da solução.\n\n## Melhoria de Desempenho\n\nO script tem uma complexidade O(2^n), Entretanto, algumas otimizações foram aplicadas para melhorar a performance. Uma delas foi a reorganização da lista em ordem decrescente, para que números maiores fossem utilizados primeiro, e a outra foi a mudança de caminho ao atingir uma soma maior do que o número desejado.\n\nCom essas mudanças, o algoritmo agora é executado de forma mais eficiente e evita iterações desnecessárias. Como resultado, a execução do script agora é muito mais rápida do que antes.\n\n## Utilização\n\nPara utilizar o algoritmo, importe a função `find_sum` do módulo `achar_soma` e chame-a passando a lista de números e o valor alvo como argumentos:\n\n```python\nfrom project.code.achar_soma import find_sum\n\nNUMBERS = [0.50, 2, 2.50, 5, 7, 2.20] # exemplo\nTARGET_SUM = 10.00  # Exemplo\n\n    if RESULT[0]:\n        print(f\"\\nEXISTE !! Subconjunto: {RESULT[1]} \")\n    else:\n        print(\"\\nnão tem :(\")\n\n```\n\nO código acima irá verificar se há um subconjunto de NUMBERS que soma exatamente TARGET_SUM. Se encontrar um subconjunto, imprimirá \" EXISTE !! \". Caso contrário, imprimirá \" não tem :( \".\n\nNesse exemplo o terminal vai responder com \n``` EXISTE !! Subconjunto: [5, 2.5, 2, 0.5] ```\n\n## Minha experiência\n\nAo utilizar o código antes ele rodava bem com conjuntos de até 20 números, agora roda fácilmente com arrays bem maiores e ainda retorna os valores utilizados para chegar ao resultado.\n\n## Update de testes e limitações\n\nAo testar o script com o último update, em um input de 45 números houve uma melhora significativa da performance:\n\nInput de teste:\n\n```python\n# Verifica se o script está sendo executado diretamente\nif __name__ == '__main__':\n    NUMBERS = [ 116.08,  237.89, 19.60,  109.68,  111.31,\n                39.20,  65.63,  135.85,  299.79,  88.42,\n                278.80,  32.80,  39.20,  94.21,  156.10,\n                181.07,  83.93,  19.60, 127.76,  172.73,\n                100.00,  83.19,  19.60,  171.29,  39.20,\n                137.51,  39.20,  83.93,  124.20,  432.12,\n                349.43, 184.07,  113.20,  271.95,  19.60,\n                71.29,  124.04, 24.50,  19.60,  161.43,\n                49.23,  81.23,  247.62, 19.39,  88.66 ]  # Exemplo de números\n\n    TARGET_SUM =  2345.07  # Exemplo de soma desejada\n```\n\nSaída do script antes:\n\n```python\n[Running] python -u \"c:\\busca em profundidade\\project\\code\\achar_soma.py\"\n\nEXISTE !!\n\n[Done] exited with code=0 in 345.134 seconds\n```\n\nSaída do script atualmente:\n\n```python\n[Running] python -u \"c:\\busca em profundidade\\project\\code\\achar_soma.py\"\n\nEXISTE !! Subconjunto: [432.12, 349.43, 299.79, 278.8, 271.95, 247.62, 172.73, 88.42, 83.19, 49.23, 32.8, 19.6, 19.39] \n\n[Done] exited with code=0 in 3.277 seconds\n```\n\n## Hardware utlizado para teste\n\nCPU:\n\n\t11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz\n\nMemória Ram:\n\n    8,0 GB\n\n    \n\n## Autores\n\n* Thiago da Silveira Gentil\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftgentil%2Fbusca-em-profundidade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftgentil%2Fbusca-em-profundidade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftgentil%2Fbusca-em-profundidade/lists"}