Svmmarivm
Adhvc cvrsvs algorithmos vna tantvm qvaestione ivdicavit: facivntne qvod dicvnt? Haec lectio alteram addit, qvae decernit an programma rectvm in vsv valeat: qvanti constat? Svmptvs primvm sine horologio metimvr, nvmerando qvoties operatio dominans exseqvatvr, et fvnctio magnitvdinis datorvm esse invenitvr. Qvod in ea fvnctione interest non est valor eivs pro dato , sed qvomodo crescat: tabvla ipsorvm , , et ostendit discrimina inter algorithmos, cvm decem datis invisibilia, cvm decies centenis milibvs abyssos fieri. Notatio vt abbreviatio horvm ordinvm incrementi proponitvr, sine definitione formali, cvm exemplis iam in cvrsv visis: Evclides, logarithmicvs; svmma vectoris, linearis; omnivm parivm comparatio, qvadratica; Fibonacci simplex, exponentialis. Deinde horologio ipsivs <chrono>, std::chrono::steady_clock, metimvr, et discitvr cvr vna mensvra fallat, cvr cvm optimizatione et sine detectoribvs metiamvr, et qvomodo mensvra cvm praedictione conferatvr: dvplicato , algorithmvs linearis tempvs svvm dvplicat et qvadraticvs qvadrvplicat.
Proposita discendi
- Operationes dominantes algorithmi vnvm dvosve circvitvs habentis nvmerare secvndvm magnitvdinem datorvm.
- Algorithmvm vt constantem, logarithmicvm, linearem, vel qvadraticvm classificare, et praedicere qvomodo tempvs eivs mvtetvr dvplicato .
- Tempvs exsecvtionis cvm
std::chrono::steady_clockmetiri et mensvram cvm praedictione comparare. - Inter dvos algorithmos pro data magnitvdine datorvm eligere, electionem ordine incrementi ivstificando.
Operationes nvmerare
Altera qvaestio
Lectiones Circvitvs rectos designare et Recvrsio docvervnt qvomodo demonstretvr algorithmvm rectvm esse: evm terminari et eivs resvltatvm postcondicioni satisfacere. Atqvi lectio Algorithmi nvmerici dvo examina primalitatis aeqve recta ostendit, altervm circiter divisionibvs, altervm circiter , et lectio Recvrsio dvos modos rectos compvtandi , altervm vocationibvs, altervm 29 additionibvs. Qvod si ita est, rectitvdo ad eligendvm non svfficit: e dvobvs algorithmis rectis alter momento respondere potest, alter non finire anteqvam responsvm intersit. Altera igitvr qvaestio qvae algorithmo ponitvr est qvanti constet.
Svmptvs horologio metiri possemvs, et sectio qvarta id faciet. Sed tempvs vnivs exsecvtionis pendet a machina, a compilatore, ab eivs optionibvs et ab eo qvod compvtatrvm eodem tempore agit; ex eo nihil de algorithmo in alia machina seqvitvr. Qvod a nvllo horvm pendet est nvmervs gradvvm qvos algorithmvs facit. Ex qvo seqvitvr prima hvivs lectionis decisio: svmptvm nvmerando metiri, et horologivm ad nvmerationem confirmandam relinqvere.
Magnitvdo et operatio dominans
Omnes gradvs nvmerare (qvamqve additionem, qvamqve comparationem, qvodqve incrementvm indicis, qvemqve accessvm ad memoriam) molestvm et invtile esset, qvia fere omnes vnvm principalem proportione fixa comitantvr. Eligitvr igitvr operatio dominans: ea qvae saltem totiens exseqvitvr qvotiens qvaelibet alia, praeter factorem constantem, et qvae ideo omnes repraesentat. In svmma elementorvm vectoris est additio; in qvaerendo maximo, comparatio; in examine primalitatis, divisio. Nvmervs vicivm qvibvs exseqvitvr exprimitvr secvndvm magnitvdinem introitvs, qvae vocatvr: nvmervs elementorvm vectoris, nvmervs qvi examinatvr, nvmervs digitorvm.
Circvitvs simplex qvi vectorem elementorvm percvrrit et cvm vnoqvoqve fixam laboris qvantitatem facit operationem svam dominantem vicibvs exseqvitvr. Maximvm avtem vectoris non vacvi a primo elemento vt candidato incipit et cvm eo singvla cetera comparat: comparationes. Discrimen inter et vervm est, sed, vt in sectione tertia videbitvr, nihil eorvm qvae intersvnt mvtat.
Casvs pessimvs
Nonnvlli algorithmi non semper evndem nvmervm operationvm cvm datis eivsdem magnitvdinis exseqvvntvr. Inqvisitio valoris in vectore, qvem percvrrit donec evm inveniat, vnam tantvm comparationem facit si valor in prima positione est, et si abest. Vt de eivs svmptv loqvamvr, altera e dvabvs condicionibvs eligitvr, et electio vsitata est casvs pessimvs: nvmervs maximvs operationvm inter omnes introitvs magnitvdinis . Ratio eadem est ob qvam pactvm pro omnibvs introitibvs scribitvr qvi praecondicioni satisfacivnt: casvs pessimvs cavtio est, optimvs spes. Itaqve qvaesitio linearis comparationibvs in casv pessimo constat, et cvm haec lectio simpliciter «svmptvm» dicit, evm casvs pessimi dicit.
Circvitvs inclvsi
Lectio Circvitvs docvit qvomodo gyri dvorvm circvitvvm inclvsorvm nvmerentvr. Si interior semper gyros facit pro vnoqvoqve e exterioris, corpvs interivs vicibvs exseqvitvr. Si interior ab exteriore pendet, ordine per ordinem svmmatvr. Casvs qvi in collectionibvs tractandis saepissime occvrrit est omnivm parivm: qvodqve elementvm cvm singvlis seqventibvs comparare, vt cvm qvaeritvr an vector repetita habeat.
#include <print>int main(){ for (int n{10}; n <= 10'000; n *= 10) { long long comparisons{0}; for (int i{0}; i < n; ++i) { for (int j{i + 1}; j < n; ++j) { ++comparisons; } } std::println("n = {:>6}: {:>10} comparationes; n(n - 1)/2 = {}", n, comparisons, static_cast<long long>(n) * (n - 1) / 2); }}n = 10: 45 comparationes; n(n - 1)/2 = 45n = 100: 4950 comparationes; n(n - 1)/2 = 4950n = 1000: 499500 comparationes; n(n - 1)/2 = 499500n = 10000: 49995000 comparationes; n(n - 1)/2 = 49995000Nvmerator locvm tenet comparationis qvam algorithmvs vervs faceret. In gyro exterioris, interior a ad it et gyros facit; itaqve svmma est , svmma lectionis Circvitvs:
Exitvs formvlam pro qvaqve magnitvdine confirmat. Nvmerator est long long qvia, ab circiter sexaginta qvinqve milivm, nvmervs parivm maximvm ipsivs int (in hac machina 32 bitorvm) svperat, et formvla eadem de cavsa post conversionem mvltiplicat: nvmerator algorithmi qvadratici mvlto ante data exvndat.
Iam animadvertatvr qvod sectio tertia generalizabit: mvltiplicato per 10, comparationes circiter per 100 mvltiplicantvr. Cvm decem datis, 45 comparationes; cvm decem milibvs, fere qvingenties centena milia.
Argvmentvm oneratvr…