Программирование Pearls первой глава упражнения рода 6.1000 целого

 

 

 

 

 

Описание Название: целое число от 1 до 10000000, 1000 произвольно выбранных целых чисел (многоразовые), для каждого целого может происходить до 10 раз. Эти целые числа в порядке возрастания.  

Анализ: 1000 целого число, мы можем использовать 10 миллионов в соответствии с размером символов, чтобы записать число раз появляется, как 3, 1, 5, 6,5 показывают, что {1, 0, 1, 0, 2 пять массив символов, 1}. 1 1 возникновение, так что первый символ представляет собой запись; 2 представляют 0 раз, запись с 0, и так далее.

              Тогда мы заказываем слева направо, I-индекс числа символов, сколько раз индекса (индекс, который представляет собой целое число вы хотите выводить) выходы. Выход: 1,3,5,5,6. Это не магия. Этот вид упорядоченного магазина завершена т.е. немного временная сложность O (N), пустой

              Inter сложность, чтобы увидеть, что магазин.

                Так как это может быть в случае, мы можем использовать его для хранения растрового изображения, вы можете сэкономить много места, и немного работы быстро. Каждая запись может рассматриваться как целое, но только бит 0 или 1, можно записать максимальное количество вхождений, что, если до 10 слов, по крайней мере,

              К 4 (двоичному представлению BIN 1111, десятичный 15 декабря). Таким образом, мы можем использовать для записи ПОЛУБАЙТОМ целое, то число 10000000 требуется (10000000/2) 5000000 байт. Int типа с сохраненным Java требуется (5000000/4) 1250000 INT типа это.

              Не экономить много места (вопреки тому, что эти пространства не сейчас), чем 1000 символов. Но мы все еще должны оптимизирует дух.

    Подготовка 1: Поскольку использование разрядного целого числа для записи, мы должны понимать позицию соответствующих операций и операций. Мы можем использовать два способа для достижения немного сложения.

               Во-первых, давайте посмотрим на науку, добавляя биты до четырех, например.

                   (1) бит сумматор может быть использован для завершения операции XOR бита: BIN (0001) + BIN (0001) = BIN (0001) ^ БИН (0001) = БИН (0001), отмечен в это время, что результат без переноса и.

                   Расчет переноса (2) битовый сумматор может быть использован для завершения операции: Перенос = [БИН (0001) & БИН (0001)] << 1 = БИН (0010).

                   (3), затем (1) и (2), то конечный результат получается путем добавления и: BIN (0001) + BIN (0010) = BIN (0001) ^ BIN (0010) + [БИН (0001) & БИН (0001)] << 1 

                 Теперь мы подошли к финалу, и он представляет собой сумму двух двоичных, и что, когда он добавляется, чтобы остановить то, что это, конечно, не нести добавил Да, кэрри, равные 0 ах.

                Не чувствуя вдруг увидеть свет, это не то, что рекурсивная операция добавления Ну, пока перенос не будет равно 0 до конца рекурсии. Это сердце низко, и мы можем использовать рекурсию для достижения этой операции сложения (операция действительно волна ожесточенной, как тигр ах).

                Тогда мы поняли, что это о нем.

               Всего несколько строк кода, не очень просто.

    Подготовка 2: Перед тем, как начать практические кодирования, мы должны сначала понять, что необходимо для реализации конфигурации бита для хранения API, это нажать на пол-байтовое целое число, хранящееся целый массив, а затем выводить ряд операций на основе значения базовой циклической записи Какая функция да.

                 1. Функция множества: число вхождений в целое число хранится на междунар. halfSet (INT вал)

                 2. Функция очистки: число вхождений целого очищается. Это может инициализировать наш целочисленный массив, а также для другой работы (разговор обратно). halfClr (INT вал)

                 3. Функция GetValue: число вхождений в целом числе выйти на переработку выхода. ПолучитьЗначение (INT вал)

          Здесь мы начинаем большой бой его. ,

    Реализация:

              

DFD

 

 

рекомендация

отwww.cnblogs.com/leafIcesun/p/11980112.html
рекомендация