Adon (lord) rakstīja dorians kopienā, @ 2003-11-15 03:53:00 |
|
|||
Mūzika: | Sandra - One More Night |
Проблема железнодорожной компании (программистская басня от Эдсгера Дейкстры)
В незапамятные времена была организована железнодорожная компания. Один из её руководителей (вероятно, коммерческий директор) обнаружил, что можно сэкономить много денег, если снабжать туалетом не каждый железнодорожный вагон, а лишь половину из них. Так и решено было сделать.
Однако вскоре после начала пассажирских перевозок начались неприятности с туалетами. Причина их была крайне проста: хотя компания была только что создана, неразберихи уже хватало, и о распоряжении коммерческого директора ничего не знали на сортировочных станциях, где все вагоны считали одинаковыми. В результате в некоторых поездах туалетов почти совсем не было.
Чтобы исправить положение, каждый вагон снабдили надписью, говорящей, есть ли в нём туалет, и сцепщикам было велено составлять поезда так, чтобы около половины вагонов имели туалеты. Хотя это и осложнило работы сцепщиков, вскоре они с гордостью сообщили, что тщательно выполняют новую инструкцию.
Тем не менее неприятности с туалетами продолжались. Новое расследование их причин показало, что хотя действительно половина вагонов в поезде снабжена туалетами, иногда выходит так, что все они оказываются в одной половине поезда. Чтобы спасти дело, были выпущены новые инструкции, предписывающие чередовать вагоны с туалетами и без них. Это добавило работы сцепщикам, однако, поворчав, они и с этим справились.
Но проблема на этом не кончилась. Поскольку туалет располагается в одном из концов вагона, расстояние между двумя соседними туалетами в поезде могла достигать трёх длин вагонов, и для пассажиров с детьми — особенно если коридоры были заставлены багажом — это было слишком далеко. Тогда вагоны с туалетами были снабжены стрелкой, и были изданы новые инструкции, предписывавшие, чтобы все стрелки были направлены в одну сторону. Нельзя сказать, чтобы эти инструкции были встречены на сортировочных станциях с энтузиазмом — количество поворотных кругов было недостаточным, но, напрягшись, сцепщики научились делать и это. Теперь, когда все туалеты находились на равных расстояниях, компания была уверена в успехе, однако пассажиры продолжали беспокоиться: хотя до ближайшего туалета было не больше одного вагона, но не было ясно, с какой стороны он находится. Чтобы решить эту проблему, внутри вагонов были нарисованы стрелки с надписью "Туалет", сделавшие необходимым правильно ориентировать и вагоны без туалетов.
На сортировочных станциях новая инструкция вызвала шок: сделать требуемое вовремя было просто невозможным. В критический момент кто-то, чьё имя сейчас невозможно установить, заметил следующее. Если мы сцепим вагон с туалетом с вагоном без оного так, чтобы туалет был посередине, и никогда их не будем расцеплять, то сортировочная станция будет иметь дело вместо N ориентированных объектов с N/2 объектами, которые можно во всех отношениях и со всех точек зрения считать симметричными. Это наблюдение решило проблему ценой двух уступок. Во-первых, поезда могли теперь состоять лишь из чётного числа вагонов — недостающие вагоны могли быть оплачены за счёт экономии от сокращения числа туалетов, и, во-вторых, туалеты были расположены на чуть-чуть неравных расстояниях. Но кого беспокоит лишний метр? Хотя во времена, к которым относится наша история, человечество не знало ЭВМ, неизвестный, нашедший это решение, был первым в мире компетентным программистом.
Я рассказывал эту историю разным людям. Программистам, как правило, она нравилась, а их начальники обычно сердились всё больше и больше по мере её развития. Настоящие математики, однако, не могли понять, в чём её соль.
Nopūsties: