Доналд Кнут як олими компютер аст, ки дар бораи дурустии китобҳои худ, ки пешниҳод мекунад, хеле ғамхорӣ мекунад як шонздаҳ доллар ($2,56, 0x$1,00) барои ҳама гуна "хато"-и ёфтшуда, ки дар он хатогӣ ҳамчун ҳама чизест, ки "аз ҷиҳати техникӣ, таърихӣ, чопӣ ва ё сиёсӣ нодуруст" муайян карда мешавад. Ман дар ҳақиқат мехостам, ки аз Кнут чек гирам, бинобар ин ман қарор додам, ки дар асари бузурги ӯ хатогиҳоро ҷустуҷӯ кунам "Санъати барномасозӣ" (TAOCP). Мо тавонистем се нафарро пайдо кунем. Кнут ба кавли худ вафо кард, ба он чек фиристод 0х $3,00.
Тавре ки шумо мебинед, ин санҷиши воқеӣ нест. Knuth истифода мефиристад чек воқеӣ, Аммо қатъ дар 2008 бо сабаби қаллобии шадид. Ӯ ҳоло ба "сертификати амонатии шахсӣ" мефиристад Бонки Сан Серриф (БоСС). Ӯ мегӯяд, ки дар сурати зарурат омода аст пули ҳақиқиро бифиристад, аммо ба назар чунин мерасад, ки ин як мушкили зиёд аст.
Ман ду хатои хаттӣ ва як хатои таърихӣ пайдо кардам. Ман онҳоро бо тартиби кам кардани ночизӣ номбар мекунам.
Хатои №1
Хатогии аввал дар сањифаи 392 љилди сеюми «Мураттаб ва љустуљў», сатри њаштум аз поён: «Баъд аз љустуљўи бемуваффақият баъзан (баъзан) матлуб аст, ки дар ҷадвал сабти нав ворид карда шавад. K; усуле, ки ин корро мекунад, алгоритми ҷустуҷӯ ва воридкунӣ номида мешавад. Хатогӣ дар он аст, ки ба ҷои он баъзан бояд баъзан.
Албатта, чунин хатой тааҷҷубовар нест. Танҳо дар ин мақола ҳатман якчанд хатогиҳои чопӣ мавҷуданд (барои дарёфти онҳо мукофотпулӣ нест). Чизе, ки воқеан тааҷҷубовар аст, он аст, ки муддати тӯлонӣ нодида гирифта шуд. Саҳифаи 392 дар бахши математика амиқ дафн нашудааст, он аст саҳифаи аввал Боби 6 "Ҷустуҷӯ"! Эҳтимол яке аз бахшҳои аз ҳама хондани китоб. Дар назария, бояд камтарин хатогиҳо вуҷуд дошта бошанд, аммо не.
Дар омади гап, агар шумо ягон бор дар бораи хондани TAOCP фикр карда бошед, онро санҷед. Бисёриҳо мегӯянд, ки ин аст директория, барои мутолиаи мустақим пешбинӣ нашудааст, аммо ин дуруст нест. Муаллиф нуктаи назари равшан ва услуби хос дорад. Ягона чизе, ки ба хондан халал мерасонад, мураккабии математика аст. Бо вуҷуди ин, як роҳи ҳалли оддӣ вуҷуд дорад: то он даме, ки шумо ба математика нафаҳмед, хонед, онро гузаред ва ба бахши ояндае, ки шумо фаҳмед, гузаред. Бо ин роҳ, ман камаш 80% китобро аз даст медиҳам, аммо 20% боқимонда хеле хуб аст!
Инчунин гуфта мешавад, ки TAOCP номарбуте, кӯҳна шудааст ё ба таври дигар ба "барномасозии воқеӣ" мувофиқ нест. Ин ҳам дуруст нест. Масалан, бахши аввал пас аз муқаддима ба дарёфти элемент дар массиви ҷудонашуда назар мекунад. Соддатарин алгоритм барои ҳама барномасозон шинос аст. Нишондиҳандаро дар ибтидои массив оғоз кунед ва пас дар як давр амалҳои зеринро иҷро кунед:
Тафтиш кунед, ки оё унсури ҷорӣ як чизи дилхоҳ аст. Агар ин тавр бошад, мо онро бармегардонем; дар акси ҳол
Санҷед, ки нишондиҳанда берун аз сарҳади массив аст. Агар ин тавр бошад, хаторо баргардонед; дар акси ҳол
Масштаб кунед ва идома диҳед.
Акнун фикр кунед: ин алгоритм ба ҳисоби миёна чанд санҷишро талаб мекунад? Дар бадтарин ҳолат, ки дар он массив элемент мавҷуд набошад, ҳар як элементи рӯйхат як чекро талаб мекунад ва ба ҳисоби миёна он чизе монанди он хоҳад буд. . Алгоритми ҷустуҷӯи оқилона метавонад танҳо бо як чеки маҳдуд халос шавад. Элементи дилхоҳро ба охири массив замима кунед, пас нишондиҳандаро дар аввали массив оғоз кунед ва дар як давра амалҳои зеринро иҷро кунед:
Санҷед, ки оё унсури ҷории дилхоҳ аст. Агар ин тавр бошад, мо ҷавобро бармегардонем, агар нишоннамо дар дохили массив бошад, ё хатогӣ, агар он набошад. Дар акси ҳол
Масштаб кунед ва идома диҳед.
Бо ин ё он роҳ, пайдо шудани элемент кафолат дода мешавад ва санҷиши ҳудудҳо танҳо як маротиба ҳангоми рух додани ин сурат анҷом дода мешавад. Ин як идеяи амиқ аст, аммо он ҳатто барои як барномасози навкор кофӣ оддӣ аст. Эҳтимол ман дар бораи аҳамияти кор ба дигарон ҳарф зада наметавонам, аммо ман дарҳол тавонистам ин ҳикматро ҳам ба кодекси шахсӣ ва ҳам касбӣ татбиқ кунам. Китоби TAOCP пур аз чунин ганҷҳост (бо одилона, дар он ҷо чизҳои аҷиб низ зиёданд, масалан навъи ҳубобӣ).