• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Optymalizacja zagnieżdżonych pętli, tablice, c++

Object Storage Arubacloud
+1 głos
277 wizyt
pytanie zadane 18 stycznia 2021 w C i C++ przez Flaven Początkujący (320 p.)
otagowane ponownie 18 stycznia 2021 przez Flaven

Witam serdecznie,

jest jakiś optymalny sposób aby zoptymalizować czas przetwarzania tych tablic?

Aktualnie trwa to jakoś 10 minut.. :)

int main(int argc, char *argv[])
{
    ios_base::sync_with_stdio(0);

    string tab2[32] = { "a", "h", "c", "d", "1", "f", "g", "b", "i", "j", "2", "l", "m", "n", "o", "p", "r", "t", "u", "w", "y", "z", "e", "k", "3", "4", "5", "6", "7", "8", "9" };
    string hashh;
    string hashh_do ="a1kh78fm";
    string *w;
    w = &hashh;
    for(int i=0; i<=31;i++){
    for(int i2=0; i2<=31;i2++){
    for(int i3=0; i3<=31;i3++){
    for(int i4=0; i4<=31;i4++){
    for(int i5=0; i5<=31;i5++){
    for(int i6=0; i6<=31;i6++){
    for(int i7=0; i7<=31;i7++){
    for(int i8=0; i8<=31;i8++){
        *w = tab2[i]+tab2[i2]+tab2[i3]+tab2[i4]+tab2[i5]+tab2[i6]+tab2[i7]+tab2[i8];
        if(*w==hashh_do)
        {
            cout<<"HASH:"<<hashh<<endl;
            break;
        }
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    if(hashh==hashh_do) break;
    }
    return 0;
}

Również chciałbym zaznaczyć, że tych pętli będzie około 200-stu...

komentarz 18 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)

Powiedz proszę: co do k****?
Lub grzeczniej: co zamierzasz osiągnąć?..

komentarz 18 stycznia 2021 przez Flaven Początkujący (320 p.)
Potrzebuje odnaleźć hash który jest podany. Który głównie się składa z liter i cyfr.
komentarz 18 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
Z tego co się orientuję, to hashe są nieodwracalne, a takim brutem to na pewno tegeo nie zrobisz przez najbliższą erę :)
komentarz 18 stycznia 2021 przez Flaven Początkujący (320 p.)
Czyli nie da się nic zrobić aby chociaż ciut szybciej program został przez mój komputer wykonany? Działa tylko na 20% użycia procesora.. :/

2 odpowiedzi

+1 głos
odpowiedź 18 stycznia 2021 przez TOM_CPP Pasjonat (22,640 p.)
edycja 18 stycznia 2021 przez TOM_CPP

jest jakiś optymalny sposób aby zoptymalizować czas przetwarzania tych tablic?

Można spróbować wykorzystać wielowątkowość. Tylko że w tym przypadku mamy do czynienia z problemem NP-zupełnym i niewiele to da. To tak jakbyś musiał wylać całą wodę z oceanu za pomocą łyżeczki i ktoś zaproponował by ci użycie do tego celu wiadra. Niestety w tym przypadku trzeba poczekać aż będą dostępne komputery kwantowe.

 

Również chciałbym zaznaczyć, że tych pętli będzie około 200-stu

Można użyć tylko jednej pętli, chociaż niewiele to pomoże w optymalizacji, to będzie ładniej wyglądało.

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

int main()
{
    string keys {"abcdefghijklmnoprstuwzvx0123456789"};
    string hash {"g7a"};

    vector<int> sequence( keys.size() );
    iota( sequence.begin() , sequence.end() , 1 );
    string token {};

    do
    {
        token = "";
        for( int i {0}; i < hash.size() ; ++i ) token += keys[sequence[i]-1];        
        reverse( sequence.begin() + hash.size() , sequence.end() );
        if( token == hash ) break;
    } while( next_permutation( sequence.begin() , sequence.end() ) );

    cout << token << endl;
    return 0;
}

 

+1 głos
odpowiedź 18 stycznia 2021 przez mokrowski Mędrzec (155,460 p.)
Pytanie brzmi, co wiesz o hashu :) Czy wiesz jaką ma długość? Czy posiada powtórzenia czy nie?

Jeśli na któreś z tych pytań masz odpowiedź tak, można istotnie skrócić czas wykonania zadania.
komentarz 18 stycznia 2021 przez Flaven Początkujący (320 p.)
edycja 18 stycznia 2021 przez Flaven

Witam serdecznie,

hash będzie miał długość 64 znaki. Więc pętli na pewno będzie o wiele mniej, czyli dokładnie 64 pętle. Czyli defacto mamy kombinacji 32^64 a tym samym na pewno hash nie będzie się składał z aaaaaaaaaaaaaa(...aaa...)aaaaaaaaaaaaaaaaab, aaaaaaaaaaaaaa(...aaa...)aaaaaaaaaaaaaaaaac Itd.. Tego mój program nie wykrywa. Hasha do odgadnięcia nie będę miał podawanego. Będę tworzył go i za pomocą różnych funkcji będę sprawdzał czy jest taki sam. Jest to sól do hashowania sha-256. 

sol = X;
caly_hash = hash('sha256', sol+"5112312");

for..
for..
tymczasowy_hash=tab2[i1]+tab2[i2];
if(caly_hash==hash('sha256', tymczasowy_hash+"5112312");

Moim zadaniem jest odgadnąć jaki to tymczasowy hash, jaka jest wartość soli. Która jest stała i ma zawsze 64znaki. 

komentarz 18 stycznia 2021 przez mokrowski Mędrzec (155,460 p.)

hash będzie miał długość 64 znaki

 

jaka jest wartość soli. Która jest stała i ma zawsze 64znaki.

Albo ja nie rozumiem albo Ty nie rozumiesz co jest solą a co hashem.

Poza tym wskaż mi miejsce w algorytmie sha256 które nie dopuszcza skrótu wynikowego w postaci samych liter 'a' które wykluczyłeś.

komentarz 18 stycznia 2021 przez Flaven Początkujący (320 p.)
Nie to, że nie odpuszcza, tylko po co? jak taki ciąg literek aa(...) razy nigdy nie będzie miał miejsca.

Podobne pytania

0 głosów
0 odpowiedzi 253 wizyt
0 głosów
3 odpowiedzi 315 wizyt
pytanie zadane 13 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 322 wizyt
pytanie zadane 30 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...