задачка, компьютерное
Feb. 14th, 2010 02:18 pmУбил на нее немало времени сегодня, но очень понравилась:
Придумайте схему, у которой есть три входа A, B, C и три выхода not-A, not-B, not-C. Можно пользоваться элементами AND, OR и NOT, но AND и OR сколько угодно, а NOT не более двух штук.
Я на время постараюсь скрывать правильные ответы. Но у меня есть предложение: если вы уже знаете решение, или нашли его компьютерным перебором, не пишите его в комментах - напишите просто, что нашли, например. Нет ничего плохого в компьютерном переборе, но не всем интересно. Мне хотелось именно найти решение самому аналитическим путем.
Придумайте схему, у которой есть три входа A, B, C и три выхода not-A, not-B, not-C. Можно пользоваться элементами AND, OR и NOT, но AND и OR сколько угодно, а NOT не более двух штук.
Я на время постараюсь скрывать правильные ответы. Но у меня есть предложение: если вы уже знаете решение, или нашли его компьютерным перебором, не пишите его в комментах - напишите просто, что нашли, например. Нет ничего плохого в компьютерном переборе, но не всем интересно. Мне хотелось именно найти решение самому аналитическим путем.
no subject
Date: 2010-02-14 04:41 pm (UTC)no subject
Date: 2010-02-14 04:53 pm (UTC)no subject
Date: 2010-02-14 07:10 pm (UTC)no subject
Date: 2010-02-14 09:05 pm (UTC)no subject
Date: 2010-02-14 09:12 pm (UTC)Если уж говорит о реальных физических схемах, то там при реализации вовсю нужны буфера для усиления сигнала в длинных проводах. А стандартная и самая ходовая реализация буфера - 2 инвертора. При этом число буферов в вашем микропроцессоре больше числа всех остальных гейтов вместе взятых :-)
no subject
Date: 2010-02-14 09:35 pm (UTC)no subject
Date: 2010-02-14 09:50 pm (UTC)Теперь почему нельзя 4 заменить на 2. Допустим, у вас есть схема, вычисляющая NOT x, NOT y, NOT z с двумя инверторами. Внутри этой схемы инверторы стоят на выходах подсхем, вычисляющих какие-то функции от x, y, z: f(x, y, z) и g(x, y, z). Теперь вы хотите объединить эту схему со схемой, вычисляющей NOT u, где u - четвёртая переменная. То, что вы можете получить с двумя инверторами, будет схемой, вычисляющей NOT f(x, y, z), NOT g(x, y, z) и NOT u. Но никак не схему, вычисляющую четыре отрицания входных переменных :-)
no subject
Date: 2010-02-14 09:51 pm (UTC)Теперь почему нельзя 4 заменить на 2. Допустим, у вас есть схема, вычисляющая NOT x, NOT y, NOT z с двумя инверторами. Внутри этой схемы инверторы стоят на выходах подсхем, вычисляющих какие-то функции от x, y, z: f(x, y, z) и g(x, y, z). Теперь вы хотите объединить эту схему со схемой, вычисляющей NOT u, где u - четвёртая переменная. То, что вы можете получить с двумя инверторами, будет схемой, вычисляющей NOT f(x, y, z), NOT g(x, y, z) и NOT u. Но никак не схему, вычисляющую четыре отрицания входных переменных :-)
no subject
Date: 2010-02-14 10:28 pm (UTC)no subject
Date: 2010-02-15 12:42 am (UTC)Есть два инвертора.
Строим из них три.
Потом выбираем из получившихся трёх любые два и опять строим из них три.
Итого становится четыре :)
Процесс продолжаем до бесконечности.
no subject
Date: 2010-02-15 07:55 am (UTC)no subject
Date: 2010-02-15 03:39 pm (UTC)Интересно бы промоделировать.
P.S.Вообще надо переходить на Haskell. Сейчас написал бы уравнения 4 инверторов, построенных на двух, а потом бы написал монаду с задержкой сигнала, вот и всё моделирование :)
no subject
Date: 2010-02-15 03:58 pm (UTC)Вообще, проработав 4 года в индустрии, из них 2 в исследовательском подразделении, могу с уверенностью утверждать, что схемы с комбинационными циклами между гейтами, реализующими полноценные булевы функции, избегаются практически во всех промышленных мэйнстримных методологиях (по разговорам со старшими товарищами), сам я ни разу с такими не сталкивался.
С современной высокой частотой работы железа это принесло бы невероятные трудности. Уже сейчас время переключения вполне легального гейта уже одного порядка с временем одного периода клок-цикла. Приходится долго сводить дизайн, чтобы схема корректно работала. Если же ещё допустить большие циклы из гейтов, в которых будут такие колебания, то работать с таким дизайном будет уже невозможно. Каждый гейт в цикле имеет собственную задержку + задержки в проводах, да ещё это всё должно будет несколько раз прокрутиться до тех пор, пока не установятся стабильные сигналы. Чем это всё рассчитывать, просто запрещают комбинационные циклы в дизайне. И совсем уж сумасшедший дом получится при переходе с одной библиотеки реализаций гейтов на другую, с новыми задержками. Там вообще всё пересчитывать заново, потому что легальные циклы могут стать нелегальными. (Пересчитывать заново и кучу всего переписывать приходится и так, но это уже другая тема :-)