Académique Documents
Professionnel Documents
Culture Documents
http://escher07.altervista.org
NoteGenerali
WordlistMakerunprogrammafattopercreareedelaboraredizionari,ovverosostanzialmentelistedi
parole,chepossanoessereutilizzateperattacchiadizionarioadesempiosuhashprecedentemente
catturati,comeaccadeadesempionelleprovedicrackdelleretiwireless.
Lasuastrutturalogicasicapisceosservandolaseguentemascheraprincipale:
Lefunzioniprincipalisono3ossia:
Funzione Descrizione
Create Percrearenuovidizionaridaalgoritmiclassicidi
calcolocombinatoriooinmodocasuale
Process Pereseguireoperazioni(esempiopermutazionisu
undizionarioesistente)
Join Joinpercombinarefraloro(sostanzialmente
attraversoilprodottocartesiano)duedizionari
esistenti
Ciascunafunzionehaipropriparametricaratteristici(es.setdicaratteri,filediinput,output)che
compaiononelrelativotab.Tuttelefunzionihannoperincomuneunaseriedicontrollichecompaiono
nellapartebassadellaform,ovveroiseguenti:
oltreadunabarradiavanzamentoedunboxdidialogoilcuiruoloevidente.Mediantelelencoa
discesaOutputTosiscegliesostanzialmenteseloutputdellanostraoperazionedeveesseredirettoverso
unfileoppureversoildialogboxdicuisopra.
Laredirezioneversoildialogboxoltrearallentareiltuttodchiaramentedeiproblemidilimitemassimo
dirighe.Luscitadaintendersicomenormalesostanzialmenteilfile:quellaversolacaselladidialogosi
utilizzaingenereperprove,debug,eperrendersicontodiquellochesuccede.
LavelocitinscritturapuessereinqualchemodomassimizzataattraversoilnumerodicicliWriteEvery
(Loop).Seadesempioquestonumerovale100vuoldirecheilprogrammabufferizza100righeprimadi
chiamarelaFile.WriteLine()cheabbastanzalenta.Ilnumeropernondeveesseretroppoaltopernon
incorrerenellalentezzalegataagestirestringheenormi.
LintervallodiaggiornamentodeltemporesiduoUpdateRemainingTime(Loop)hasignificatosimile.
Anchequiaumentandolintervallodiaggiornamentoaumentaunpolavelocit,masolofinoaduncerto
punto.Ilmotivoche,percomestatofattoalmomentoilprogrammalasolapresenzadiunafunzionedi
updateformsitraduceinunacallbackdalthreaddielaborazionedellacorrispondenteoccurrence:callback
cheseilnumerodioccurrenceelevato(miliardi,ovveroGB)rallentanoinmodoinaffrontabileiltutto.
Lasoluzioneperlagenerazionedifilegrandisostanzialmentequelladidisattivaretuttolavanzamento
graficotramiteildecheckdellInteractiveOuputchepoilasoluzionedidefault.Inquestocasoper
rendersicontodellavanzamentosipucomunquesempreguardareiltassodicrescitadelfiledioutputa
sistemaoperativo.
Riguardoaibottoni,ilsignificatoovvio.LoStopchiaramentepossibileperchlelaborazionesisvolgein
unthreaddiversorispettoaquelloincuivieneeseguitalamainform.IlClearpuliscedialogboxe
informazionidiavanzamento.
Riguardoallacasellarelativaalfilesplittingparticolarmenteutilequandoilprogrammadicrackutilizzato
nonaccettafilepigrandiditanto(adesempioperAirCrackconlopzionewillimite2GB):ifilese
prova.txtilnomeassegnatoalloutputfilesarannoprova_0.txt,prova_1.txtecosvia.
FunzioneCreate
Servecomedettoagenerarenuovidizionarieiparametricaratteristicisonoquesti:
Sostanzialmente:ilcharacterset,lalgoritmoelalunghezzamassimadellaparola.Isetdicaratteriutilizzabili
sonoquellipresentinelfilecharsets.txtpresentenelladirectorydellapplicazione.Didefaultnesonostati
messialcuni(nominatiedefiniticomedastandarddiCaindiOxid.it):senepossoovviamenteaggiungere
altriotoglierli(ovviamente:almenounonelfilecharsets.txtdeveessercieilfilemedesimodeveesistere
sennlapplicazionevaincrash).
Glialgoritmipossibilisonoquesti:
Ovvero:
Disposizioniconripetizioni
PermutazioniSemplici
PermutazioniconRipetizioni
GenerazioneCasuale
Perognipossibilitnellarigadescrittivaelencato:
Iltipodiinsiemedisimboli(distintioqualunque,ovveroancheconripetizioni)
Iltipodisequenza(ordinataononordinata,lunghezza,conripetizioniono)
IlnumeroNdicasitotali
FraglialgoritminonsonostatiinseritileDisposizioniSemplicieleCombinazioni(SemplicieConRipetizioni)
perchnonritenutiutiliperilcasospecifico.Alivellodiimplementazionetuttiivarialgoritmisono
implementaticondelleclassi,figliediunaclassebase,esempio(perledisposizioniconripetizioni):
classAlg_OrdSeq:Alg_Base
Leclassisonosostanzialmentetuttesimili:lelencopropriet/metodiforniscequestorisultato:
Incuievidenziamoquestielementi:
Costruttorechericevefraglialtriininputlinsiemedeisimbolielalunghezzadelleparoleda
generare(primidueargomenti)elavoid(callback)dachiamarequandohafinitoliesima
iterazione;
MetodiPubbliciCount()ePrintAll()rispettivamenteperilconteggiodelleoccurrenceseperavviare
lagenerazione;
MetodiPrivatoFindNextIndexArray()checalcolailprossimopassaggio(inquestocasonuova
permutazionedelvettoredegliindici)
FunzioneProcess
Iparametricaratteristicistavoltasonoquesti:
Almomentolunicoalgoritmoimplementatolapermutazionedellinteraparolaconlapossibilitdi
scegliereunaappropriataazioneselaparolapilungaopicortadiuncertovalore.Fissatouncerto
limite(es.MaxWordLength=8)sipusceglierese:
Nonprocessareparolepilunghe
Processaresoloparolepilunghe
Questafunzionesirivelaindispensabilequando,datoundizionariosivoglionogenerarepertutteleparole
tuttelepossibilipermutazioni:inquestocasofissatoadesempioillimitead8caratterisisaltanoleparole
lunghe(ciononsenecalcolanole8!opipermutazioni)chepotrebberocostituiredeimomentiincui
sostanzialmenteliterazionesiblocca.
Unaprecisazionerelativaallavanzamento:questomisuratosuicicli(linee)dellinputfile.Sequestoha
parolelungheadunciclodiquestotiponecorrispondonomoltitotali(8!,9!etc..).Eccoperchquesto
lunicocasoincuiinsostanzamettereneiparametricomuniWriteEvery(Loop):=1nonsolononrallenta
troppomaanchelunicomodopervedereunaggiornamentodeidatidiavanzamentoabbastanza
continuo(edquindicosafortementeconsigliata).
FunzioneJoin
Stavoltaiparametrisonoquesti:
LalogicasimileaquelladelProcess.Glialgoritmisonostavoltadue:charunionechardifference,lacui
differenzasicapiscedagliesempinelcomboAlgorythm.Leazioniselezionabilistavoltasonoinvece
quattro,ossia:
RiguardoallimplementazionedelleoperazionidiProcesseJoinquestasostanzialmentesimile.Efatta
attraversoclassicheereditanodaunaclasseOperazioneBase:
classOpr_JoinFiles:Opr_Base
AllinternodellaWriteAll()diquestaclassesiesegueilcicloprincipale(sulfilediinputperprocess,sul
cartesianodeifilediinputperiljoin),doveadognirigasichiamaunalgoritmosullaWordcorrente,esempi:
Process:Alg_RepPermRP=newAlg_RepPerm(CurrentWordAsArray,refDummy,InternalCallback);
Join:CurrentOutput=EvalFilteredCurrentOutput(s1,s2,CurrentOutput);
Links
http://it.wikipedia.org/wiki/Calcolo_combinatorio
http://www.ioprogrammo.it/cc/algoritmo_combinazionit13636.0.html
http://forum.html.it/forum/showthread/t723252.html