программы используется для кодирования 27 000/16 = 1688 слов. Без особых усилий он смог высвободить дополнительную память. А что можно рекомендовать, если 1000 слов - жесткий предел? Сколько времени будет работать ваш алгоритм?
2. Одной из преград между наброском алгоритма и завершенной программой на Фортране является реализация побитового представления данных. Хотя это тривиально для языков, в которых поддерживаются строки битов как один из основных типов данных, программисты, использующие Фортран, вынуждены реализовывать эти структуры, используя другие операции. Предположив, что диалект Фортрана обеспечивает битовые логические операции над словами (такие как сдвиг, И, ИЛИ), как бы посоветовали реализовать операции над строками битов? Как бы вы реализовали побитовое представление, если бы этих операций не было? Как бы вы реализовали этот алгоритм на Коболе? на Паскале?
3. Важной целью разработки была минимизация времени работы, и итоговая программа получилась достаточно эффективной. Реализуйте программу на своей вычислительной системе и измерьте время ее работы. Сравните его с временем сортировки этого же файла системной программой.
4. Если вы возьметесь за задачу 3 серьезно, то столкнетесь с проблемой генерации К целых неповторяющихся чисел от 1 до 27 000. Самый простой способ - использовать первые К положительных целых чисел. Для этого вырожденного набора данных время работы алгоритма с побитовым представлением данных изменяется несущественно, но системная сортировка для него может быть выполнена гораздо быстрее, чем в случае типичных данных. Как бы вы сгенерировали файл из К целых неповторяющихся чисел от 1 до N, расположенных в случайном порядке? Постарайтесь, чтобы программа была короткой и эффективной.
5. Что бы вы порекомендовали программисту, если бы каждое число могло появиться не по одному разу, а не более 10 раз. Как бы ваше решение изменялось в зависимости от доступного объема памяти?
6. [Р. Вейл] Набросок программы имеет ряд недостатков. Во-первых, предполагается, что ни одно число не появляется на входе дважды. Что случится, если одно из них появится более одного раза? Как можно модифицировать программу, чтобы в этом случае была вызвана подпрограмма обработки ошибок? Что произойдет, если число на входе меньше 1 или больше N? Что программа сделала бы в этих случаях? Опишите небольшие наборы данных для проверки программы, включая проверку правильности ее работы в указанных и других случаях, которые могут привести к неправильной работе программы.