Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00

ʻO Donald Knuth He kanaka ʻepekema lolouila nāna e mālama nui i ka pololei o kāna mau puke āna i manaʻo ai hookahi dala hex ($2,56, 0x$1,00) no kēlā me kēia "hewa" i loaʻa, kahi i wehewehe ʻia ai kahi hewa ʻo ia kekahi mea i "kaʻenehana, mōʻaukala, typographically, a i ʻole ka politika hewa ʻole." Ua makemake nui au e kiʻi i kahi leka mai Knuth mai, no laila ua hoʻoholo wau e ʻimi i nā hewa i kāna magnum opus "The Art of Programming" (TAOCP). Ua loaʻa iā mākou ʻekolu. E like me kāna ʻōlelo, ua hoʻouna ʻo Knut i kahi leka no 0x$3,00.

Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00

E like me kāu e ʻike ai, ʻaʻole kēia he loiloi maoli. Hoʻouna ʻo Knuth i nā loiloi maoli, akā ua hoʻōki i ka makahiki 2008 ma muli o hoopunipuni laha. Hoʻouna ʻo ia i nā "palapala hōʻoia pilikino" i kēia manawa Bank of San Serriff (BoSS). Ua ʻōlelo ʻo ia ua mākaukau ʻo ia e hoʻouna i ke kālā maoli inā pono, akā me he mea lā he pilikia loa.

Ua loaʻa iaʻu ʻelua kuhi hewa a hoʻokahi hewa mōʻaukala. E papa inoa wau iā lākou ma ke ʻano o ka emi ʻana o ka mea ʻole.

Kuhi hewa #1

Aia ka typo mua ma ka ʻaoʻao 392 o ka puke ʻekolu o "Sorting and Search", laina ʻewalu mai lalo: "Ma hope o ka ʻimi ʻole ʻana, i kekahi manawa (i kekahi manawa) makemake ʻia e hoʻokomo i kahi moʻolelo hou i loko o ka papa ʻaina. K; ʻO ke ala e hana ai i kēia, ua kapa ʻia ʻo ka huli a hoʻokomo i ka algorithm. ʻO ka hewa ʻo ia ma kahi kekahi manawa inā paha kekahi manawa.

ʻOiaʻiʻo, ʻaʻole ia he mea kupanaha. Aia kekahi mau typos ma kēia ʻatikala wale nō (ʻaʻohe uku no ka loaʻa ʻana iā lākou). ʻO ka mea kupanaha loa, ʻaʻole i ʻike ʻia no ka lōʻihi. ʻAʻole kanu hohonu ʻia ka ʻaoʻao 392 ma ka māhele makemakika, ʻo ia ka ʻaoʻao mua loa Mokuna 6 "Huli"! ʻO kekahi paha o nā māhele heluhelu loa o ka puke. Ma ke kumumanaʻo, pono ka liʻiliʻi o nā typos, akā ʻaʻole.

Ma ke ala, inā ua noʻonoʻo ʻoe e heluhelu i ka TAOCP, e hoʻāʻo. He nui ka poʻe e ʻōlelo ʻo ia kēia puke kuhikuhi, ʻaʻole i manaʻo ʻia no ka heluhelu pololei ʻana, akā ʻaʻole pololei kēia. He manaʻo maopopo a he ʻano ʻokoʻa ka mea kākau. ʻO ka mea e keʻakeʻa nei i ka heluhelu ʻana ʻo ka paʻakikī o ka makemakika. Eia nō naʻe, aia kahi hopena maʻalahi: heluhelu a hiki i kou hiki ʻana i ka makemakika ʻaʻole ʻoe maopopo, e hoʻokuʻu, a hele i ka ʻāpana aʻe hiki iā ʻoe ke hoʻomaopopo. I ka heluhelu ʻana i kēia ʻano, nalo wau ma kahi o 80% o ka puke, akā maikaʻi ka 20% ʻē aʻe!

Ua ʻōlelo ʻia ʻo TAOCP pili ole, ua kahiko ʻia a i ʻole pili ʻole i ka "programming maoli". ʻAʻole ʻoiaʻiʻo nō hoʻi kēia. No ka laʻana, ʻo ka ʻāpana mua ma hope o ka hoʻomaka ʻana e nānā i ka ʻimi ʻana i kahi mea i loko o kahi ʻano i koho ʻole ʻia. ʻO ka algorithm maʻalahi loa i kamaʻāina i nā mea papahana āpau. E hoʻomaka i ka pointer ma ka hoʻomaka o ka array, a laila e hana i kēia ma kahi loop:

  1. E nānā inā ʻo ka mea i makemake ʻia i kēia manawa. Ina pela, e hoihoi aku makou; i ole ia
  2. E nānā inā aia ka mea kuhikuhi ma waho o ka palena ʻano. Inā pēlā, e hoʻihoʻi i kahi hewa; i ole ia
  3. Hoʻonui a hoʻomau.

I kēia manawa, e noʻonoʻo: ʻehia ka nui o nā loiloi palena e koi ai kēia algorithm, ma ka awelika? I ka hihia maikaʻi loa, kahi i loaʻa ʻole i ka array kahi mea, pono kēlā me kēia mea i ka papa inoa i hoʻokahi helu, a ma ka awelika e like ia. Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. Hiki i kahi algorithm hulina akamai ke hele me hoʻokahi māka palena. E hoʻopili i ka mea i makemake ʻia i ka hope o ka laha, a laila e hoʻomaka i ka pointer ma ka hoʻomaka o ka array a hana i kēia ma kahi loop:

  1. E nānā inā ʻo ka mea i makemake ʻia i kēia manawa. Inā pēlā, e hoʻihoʻi mākou i kahi pane inā aia ka mea kuhikuhi i loko o ka array, a i ʻole he hewa inā ʻaʻole. A i ʻole
  2. Hoʻonui a hoʻomau.

Hoʻokahi ʻaoʻao a i ʻole, ʻike ʻia ka mea e ʻike ʻia, a hoʻokō ʻia ka nānā palena i hoʻokahi wale nō ke hana ʻia kēia. He manaʻo hohonu kēia, akā maʻalahi ia no ka mea polokalamu polokalamu hou. ʻAʻole hiki iaʻu ke kamaʻilio e pili ana i ka pili o ka hana i nā poʻe ʻē aʻe, akā ua hiki iaʻu ke hoʻopili koke i kēia naʻauao i nā code pilikino a ʻoihana. Ua piha ka puke TAOCP i ia mau pōhaku makamae (no ka pololei, he nui nō hoʻi nā mea ʻē i loko, e like me ʻano ʻōhū).

“Himi, huli
He lōʻihi nō
Huli, huli
Makemake wale au e hula"

- Luther Vandross, "Ka Huli" (1980)

Kuhi hewa #2

ʻO ka lua o ka typo aia ma ka Volume 4A, Combinatorial Algorithms, Part 1. ʻO ka ʻaoʻao 60 e wehewehe ana i kahi pilikia e pili ana i ka hoʻonohonoho ʻana i nā mea hoʻohenehene e hoʻokani ma nā casino like ʻole. Ua helu ʻia kekahi mau mea hoʻokalakupua maoli ma ke ʻano he laʻana, ʻo ia hoʻi ʻo Lily Tomlin, Weird Al Yankovic, a me Robin Williams, e ola ana i ka wā i paʻi ʻia ai ka puke. Hoʻopaʻa mau ʻo Knuth i nā inoa piha ma ka papa kuhikuhi, no laila ua helu ʻia ʻo Williams ma ka ʻaoʻao 882 ʻo "Williams, Robin McLorim." Akā ua pau kona inoa waena me "n" a ʻaʻole "m", ʻo ia hoʻi ʻo McLaurin.

ʻO McLaurin ka inoa kaikamahine o kona makuahine. ʻO ia ka moʻopuna a Anselm Joseph McLaurin, 34th Kiaʻāina o Mississippi. ʻO kona noho aliʻi ʻana, ʻaʻole i hoʻomanaʻo ʻia no kekahi mea maikaʻi. Mai ka puke "Mississippi: Moʻolelo":

“ʻO ka hanana koʻikoʻi loa i ka wā o ka hoʻomalu ʻana o McLaurin, ʻo ia ka hoʻolaha kaua ʻana o ʻAmelika Hui Pū ʻIa ma Sepania i ka pūnāwai o 1898... ʻO ka mea pōʻino, ua hāʻawi paha ke kaua i kekahi mau luna aupuni i ka manawa e komo ai i ke kipe. Ua hoʻopiʻi ʻia ʻo McLaurin no nā hana kānalua like ʻole, me ka nepotism a me ka hoʻohana nui ʻana i nā mana kala. I ka wā o ka neʻe ʻana o ka noho ʻana, ua hoʻopiʻi ka poʻe hoʻohewa i ke kiaʻāina ʻo ia ka mea ʻona, a ua ʻae ʻo ia i ka lehulehu.

Ke kuhi hewa

E noʻonoʻo algorithm hoʻonui kuʻuna mai ka papa hana kula. ʻEhia ka helu helu hoʻokahi e pono ai? Ina paha e hoonui oe Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00-helu helu Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 maluna o Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00- iki Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. E hoonui mua i ka huahelu mua Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 no kēlā me kēia huahelu Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 pakahi. A laila e hoʻonui i ka huahelu ʻelua Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 no kēlā me kēia huahelu Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 pakahi a pela aku a hiki i ka hele ana i na helu a pau Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. No laila pono ka hoʻonui kuʻuna Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 hoonui kahiko. ʻO ka hoʻomāhuahua ʻana i ʻelua helu me Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 pono nā kūlana Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 hoonui helu hookahi.

He hewa kēia, akā hiki ke hoʻonui i ke kaʻina hana me ke ʻano i hoʻomohala ʻia e ka mea makemakika Soviet ʻo Anatoly Alekseevich Karatsuba. E hoʻohālike kākou Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 и Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 - nā helu helu ʻelua; ʻo ia hoʻi, he mau helu Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 pela Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 и Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 (ʻO ka hoʻomāhuahua ʻana i kēia algorithm i nā helu nui e pono ai kekahi manipulation; ʻoiai ʻaʻole paʻakikī loa, i ʻole e hana hewa i nā kikoʻī, ʻoi aku ka maikaʻi o wau e pili i kahi laʻana maʻalahi). A laila Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. Hāʻawi ka hoʻonui ʻana i nā binomials Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. I kēia manawa aia nō mākou Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 hoʻonui helu hoʻokahi: Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00, Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. I kēia manawa e hoʻohui a unuhi Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. Ma hope o kekahi mau hoʻonohonoho hou ʻana, aʻu e haʻalele ai i mea hoʻoikaika no ka mea heluhelu, ua ʻike ʻia Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 - ʻekolu wale nō hoʻonui helu hoʻokahi! (Aia kekahi mau coefficient mau, akā hiki ke helu ʻia ma ka hoʻohui ʻana a me ka hoʻololi ʻana i nā huahelu).

Mai noi i ka hōʻoia, akā Karatsuba algorithm (hoʻonui hou ʻia mai ka laʻana ma luna) hoʻomaikaʻi i ke ʻano hoʻonui kuʻuna me Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 nā hana ma mua Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00. E ʻoluʻolu e hoʻomaopopo he hoʻomaikaʻi maoli kēia i ka algorithm, ʻaʻole he optimization no ka helu noʻonoʻo. ʻOiaʻiʻo, ʻaʻole kūpono ka algorithm no ka helu noʻonoʻo, no ka mea, pono ia i nā kumukūʻai overhead nui no nā hana recursive. Eia kekahi, ʻaʻole e hōʻike piha ʻia ka hopena a hiki i ka nui o nā helu (ʻoi aku ka maikaʻi, ua hoʻololi ʻia ka algorithm o Karatsuba e nā ala wikiwiki loa: i Malaki 2019, ua paʻi ʻia kahi algorithm e koi wale ana. n log n hoonui; pili wale ka wikiwiki i nā helu nui ʻole).

Ua wehewehe ʻia kēia algorithm ma ka ʻaoʻao 295 o ka Volume XNUMX, Semi-Numerical Algorithms. Ma laila ʻo Knuth i kākau ai: “He mea kupanaha ka loaʻa ʻana o kēia manaʻo i loko wale nō 1962 makahiki," i ka wā i paʻi ʻia ai kahi ʻatikala e wehewehe ana i ka algorithm a Karatsuba. Akā! I ka makahiki 1995, ua paʻi ʻo Karatsuba i kahi pepa e pili ana i ka “Computational Complexity,” e ʻōlelo ana i kekahi mau mea: 1) Ma kahi o 1956, manaʻo ʻo Kolmogorov ʻaʻole hiki ke hoʻonui ʻia i ka liʻiliʻi. Ua loaʻa iaʻu kahi leka mai Knuth no 0x$3,00 ʻanuʻu; 2) ma 1960 makahiki ua hele ʻo Karatsuba i ka seminar kahi i hōʻike ai ʻo Kolmogorov i kāna kuhiakau n². 3) "I loko o hoʻokahi pule," ua hoʻomohala ʻo Karatsuba i ka algorithm "māhele a lanakila"; 4) i ka makahiki 1962, kākau a hoʻopuka ʻo Kolmogorov i kahi ʻatikala ma ka inoa o Karatsuba me ka wehewehe ʻana i ka algorithm. "Ua ʻike wale wau e pili ana i kēia ʻatikala ma hope o ka paʻi hou ʻana."

No laila ka hewa ma kahi o 1962 pono e hoakakaia 1960 makahiki. ʻo ia wale nō.

ʻIkepili

ʻAʻole pono ke akamai kūikawā i ka ʻimi ʻana i nā hewa.

  1. ʻO ka hewa mua he mea liʻiliʻi loa ia a aia ma kahi i ʻike ʻia (ka hoʻomaka o ka mokuna). Ua loaʻa i kēlā me kēia pupule; ʻO wau wale nō kaʻu i ʻike ai ʻo ia ka pupule.
  2. ʻO ka loaʻa ʻana o ka typo ʻelua e pono ai ka laki a me ka hoʻoikaika, akā ʻaʻole ke akamai. Aia ka papa kuhikuhi no "Williams" ma ka ʻaoʻao penultimate o ka leo, kahi ʻāpana koʻikoʻi o ka puke. ʻO wau wale nō ka ʻimi ʻana i ka papa kuhikuhi (ʻaʻole ia he mea minamina e like me ke kani ʻana, no ka mea, aia nā hua Easter i hūnā ʻia i loko o nā papa kuhikuhi a Knuth. Eia kekahi laʻana, aia nā helu ma ka ʻōlelo ʻAlapia a me ka Hebera, e kuhikuhi ana lāua i ka ʻaoʻao 66. Akā ʻaʻole i haʻi ʻia kēlā ʻaoʻao. ʻo nā ʻōlelo paha; akā, pili ia i "nā ʻōlelo i heluhelu ʻia mai ka ʻākau a i ka hema"). A ʻo ka inoa ʻelua i hopu i koʻu manaʻo. Ma muli o koʻu heluhelu pinepine ʻana iā Wikipedia, ua nānā au iā Robin Williams a ʻike i kahi ʻokoʻa.
  3. Manaʻo wau e hiki iaʻu ke ʻōlelo ua hana wau i kahi noiʻi koʻikoʻi e ʻike i kahi hewa mōʻaukala, akā ʻoiaʻiʻo ua nānā wau ʻO ka ʻaoʻao Wikipedia e pili ana i ka algorithm a Karatsuba. 'Ōlelo nā laina mua loa: "ʻO ka Karatsuba algorithm kahi algorithm hoʻonui wikiwiki. Ua ʻike ʻia e Anatoly Karatsuba i ka makahiki 1960 a i paʻi ʻia i ka makahiki 1962." Ma hope o ka mea i koe, e hoʻohui i ʻelua a ʻelua.

I ka wā e hiki mai ana, makemake au e ʻimi i kahi bug koʻikoʻi, ʻoi aku hoʻi ma ke code a Knuth. Makemake au e ʻimi i kahi bug ma ka puke mua o Fundamental Algorithms. Malia paha ua loaʻa iaʻu, akā no kekahi kumu he 2, 3 a me 4A wale nō ka waihona puke kūloko.

Nā ʻike kālā:

  • ʻO ka huina, ʻo kaʻu hāʻawi ʻana i ka TAOCP he ʻekolu mau huaʻōlelo: hoʻokahi hoʻohui s, pani m maluna o n и 2 maluna o 0. Ma $2,56, he mau hōʻailona maikaʻi kēia; Inā i uku ʻia ʻoe i kēlā ʻano kālā, ʻo kahi ʻatikala o 1000 huaʻōlelo (ka awelika o ʻehā mau huaʻōlelo) e loaʻa iā ʻoe he ʻumi kālā.
  • Me ʻekolu mau kālā hexadecimal, ʻo wau, a me 29 mau kamaʻāina ʻē aʻe, ua hoʻopaʻa ʻia no ka wahi 69 ma ka papa inoa o nā mea mālama waiwai loa o ka San Serriff Bank (e like me Mei 1, 2019).

Nā kūkākūkā ʻē aʻe e pili ana i nā loiloi mai Knuth

  • Pehea e loaʻa ai kahi leka mai Knuth

    Nā ʻōlelo paipai maʻamau no ka ʻimi ʻana i nā hewa i loko o nā puke a Knuth. ʻO ka hapa nui e pili ana i nā hewa ʻenehana, ʻaʻole iaʻu. Aia kekahi manaʻo ma laila aʻu i manaʻo nui ai:

    ʻOi aku ka maikaʻi e kali a hiki i ka hōʻiliʻili ʻana i kahi hoʻonohonoho hewa e waiho ai. Ma ka hoʻohui ʻana i kekahi mau hewa maoli akā ʻaʻole waiwai nui, hoʻonui ʻoe i ka likelike e manaʻo ʻia kekahi o lākou he kuhi hewa a ʻōlelo paha. Inā hoʻouna ʻoe i nā hewa i kēlā me kēia manawa, hiki ke hōʻole ʻia kēlā me kēia.

    ʻAʻole au i makemake e hoʻouna wale aku i nā ʻōlelo kuhi hewa wale nō, akā ua lawe au i ka ʻōlelo aʻo a hoʻouna wale aku i ka leka ke loaʻa iaʻu kahi hewa mōʻaukala i manaʻo nui ʻia.

  • Nā hōʻoia a Ashutosh Mehra

    ʻO Ashutosh Mehra ke kolu o ka mea hoʻopukapuka waiwai loa ma San Serriff me ka waiwai nui o 0x$207.f0 ma BoSS.

  • E hōʻoia i kekahi mau ʻino hana ʻole ma ke code TeX maoli
  • Miscellaneous: #1 #2 #3 #4 #5 #6

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka