Математически, если у вас есть конечное множество (X, размера n (n натуральных чисел) и оператор сравнения (x, y, z в X; x <= y и y <= z означает x <= z)Это очень простая задача - найти максимальное значение. (Кроме того, оно существует.) </p>
Самый простой способ решить эту проблему, но самый затратный в вычислительном отношении, - это создать массив со всеми возможными значениями иззатем найдите макс.
часть 1. Для любого типа с конечным набором элементов существует конечное число бит (m), которое можно использовать для уникального представления любого данного члена этого типа.массив, который содержит все возможные битовые комбинации, где любая данная битовая комбинация представлена заданным значением в определенном типе.
Часть 2. Далее нам нужно преобразовать каждое двоичное число в заданный тип. Эта задачагде моя неопытность в программировании делает меня неспособным говорить о том, как это может быть достигнуто. Я читал кое-что о приведении, может быть, это поможет? Или какой-то другой метод преобразования?
Па3. Предполагая, что предыдущий шаг был завершен, теперь у нас есть конечный набор значений в нужном типе и оператор сравнения для этого набора.Найти макс.
Но что, если ...
... мы не знаем точное число членов данного типа?Чем мы переоцениваем.Если мы не сможем дать разумную завышенную оценку, тогда число должно быть физическим.Получив завышенную оценку, мы проверяем все возможные битовые шаблоны, чтобы подтвердить, какие битовые шаблоны представляют элементы типа.После отбрасывания тех, которые не используются, у нас теперь есть набор всех возможных битовых комбинаций, которые представляют некоторый член данного типа.Этот последний сгенерированный набор - это то, что мы использовали бы сейчас в части 1.
... у нас нет оператора сравнения в этом типе?Чем конкретная проблема не только невозможна, но и логически неактуальна.То есть, если у нашей программы нет доступа к значимому результату, если мы сравниваем два значения из нашего данного типа, тогда у нашего данного типа нет порядка в контексте нашей программы.Без упорядочения нет такого понятия, как максимальное значение.
... мы не можем преобразовать данное двоичное число в данный тип?Тогда метод ломается.Но, как и в предыдущем исключении, если вы не можете конвертировать типы, наш набор инструментов кажется логически очень ограниченным.
Технически, вам может не потребоваться конвертировать между двоичными представлениями и данным типом.Весь смысл преобразования в том, чтобы убедиться, что сгенерированный список является исчерпывающим.
... мы хотим оптимизировать проблему?Затем нам понадобится некоторая информация о том, как данный тип отображается из двоичных чисел.Например, unsigned int, подписанный int (комплимент 2) и подписанный int (комплимент 1) каждая карта из битов в числа очень документированным и простым способом.Таким образом, если мы хотели получить максимально возможное значение для unsigned int и знали, что работаем с m битами, то мы могли бы просто заполнить каждый бит 1, преобразовать битовую комбинацию в десятичную и вывести число.
Это относится к оптимизации, потому что самой дорогой частью этого решения является список всех возможных ответов.Если у нас есть некоторые предварительные знания о том, как данный тип отображается из битовых комбинаций, мы можем сгенерировать подмножество всех возможностей, сделав вместо этого всех потенциальных кандидатов.
Удачи.