powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Два число в одно и обратно
25 сообщений из 209, страница 2 из 9
Два число в одно и обратно
    #39154193
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__Добрый вечер!

Можно ли запаковать в один Int(4-байта) два числа, первое - не превышает 9999, второе - не превышает 999999?
В задаче ничего не сказано про точность поэтому скажу что можно.

Вспомните как рабоатют float и double при разрядности 32 и 64 бит они покрывают более широкий диапазон
мантиссы чем целые. Хотя гарантируют фиксацию ведущих чисел мантиссы.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154257
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запаковать можно, распаковать нельзя )
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154302
Apoj_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__Добрый вечер!

Можно ли запаковать в один Int(4-байта) два числа, первое - не превышает 9999, второе - не превышает 999999?
Если ты точно уверен, что не превышает:
1) миллион должен быть всегда (единичка миллиона это по сути разделитель двух чисел)
2) всё от миллиона до 10010000 - это твоё первое число
3) всё что до миллиона это твоё 2е число
4) всё что больше 10010000 - перебор.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154304
Apoj_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полагаю, речь о положительных числах :)
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154316
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-то по прежнему утверждает, что задача имеет решение?
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154322
Apoj_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилКто-то по прежнему утверждает, что задача имеет решение?
предложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :)
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154337
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apoj_sqlИзопропилКто-то по прежнему утверждает, что задача имеет решение?
предложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :)
задача в том, что упаковать нужно все возможные пары(0..9999,0..999999), а не какое-то подмножество
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154340
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apoj_sqlпредложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :)

как только ты покажешь свои процедуры Pack и Unpack, так сразу
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154347
Apoj_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилзадача в том, что упаковать нужно все возможные пары(0..9999,0..999999), а не какое-то подмножество
посчитал, действительно я не прав. сорри.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154364
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Apoj_sqlполагаю, речь о положительных числах :)

Смотрите в корень постановки.

В задаче сказано.

Можно ли запаковать в один Int(4-байта) два ЧИСЛА , первое - не превышает 9999, второе - не превышает 999999?
Обратите внимание. Не целых. Не финансовых. А просто два арифметических числа.

Пример чисел:


Число Пи, масса электрона и дробь одна третья удовлетворяют условиям.

На целое здесь может намекать только формат ограничителей. Но кто скажет что арифметика различает 999999 и 999999.0 ?
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154538
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОбратите внимание. Не целых. Не финансовых. А просто два арифметических числа.
Подозреваю что это просто два ID.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39154547
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonОбратите внимание. Не целых. Не финансовых. А просто два арифметических числа.
Подозреваю что это просто два ID.
Кажется выше уже проверили что количество сочетаний 2х десятичных ID превышает
лимит 32х битного целого. Тоесть в целых числах задача не решается. Возможно были завуалированы
какие-то доп-ограничения которые мы не услышали. Например число A всегда меньше числа B.
Тогда в сочетаниях появится дырка и возможно задача станет решаемой.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155228
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марк, всё-же я думаю что речь шла о целых числах, ибо в первом сообщение тс использовал квалификатор типа Int.

SSmiksoft, а если попробовать хранить линейную комбинацию по определённым простым числам, пусть значение этой комбинации будет занимать 8 знаков или 8*3.3 = 27 бит. Этой информации будет скорее всего недостаточно. Потому оставшиеся 5 бит можно использовать для того чтобы хранить, например, разницу в количестве цифр двух чисел. Или что-нибудь ещё, что в дальнейшем поможет дешифровать исходные числа. Это всё в первом приближении, но скорее всего алгоритм позволяющий определенным образом зашифровать два этих числа в одно 32 битное существует

Казалось бы что нельзя. Автору требуется (10^10 - e) вариантов, значит при прямой адресации потребует 34 бита. Однако, несмотря на то, что я не нашёл подходящее решение, также не могу найти доказательство того что метод подобный описанному выше не существует. Если решение есть, то одним из возможных путей должен быть следующий алгоритм:
1. 32-k бит используются для того чтобы хранить линейную комбинацию вида: p1*max + p2*min.

очевидно будут коллизии

2. k оставшихся бит использовать для устранения этих коллизий.

К сожалению я не смог доказать что этот способ должен работать, но и доказать обратного я не смог также. Практически проверить сложно, ибо у меня нет доступа к машине которая может выполнить 10^10 операций достаточно быстро
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155232
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё было проще чем я думал. Доказал что и такой метод не применим
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155234
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь об ID, которые генерятся счетчиками, то задача легко решается. Надо просто пределы обоих пересмотреть, т.е. не 9999 и 999999, а 4096 и 1048576, или 8192 и 524288 и т.д. Если есть комбинация пределов, устраивающая разработчика - задача решаема.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155333
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилКто-то по прежнему утверждает, что задача имеет решение?
Я :)
999999 - можно засунуть в 19 бит.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155392
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ999999 - можно засунуть в 19 бит.
И как?

Для справки: 2^19 = 524288
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155393
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИзопропилКто-то по прежнему утверждает, что задача имеет решение?
Я :)
999999 - можно засунуть в 19 бит.

это уже не смешно. продемострируй. (естественно все целые от 0 до 999999)
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155411
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
это уже не смешно. продемострируй. (естественно все целые от 0 до 999999)
Для 9999
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  var d2 = Enumerable.Range(0, 10000).OrderByDescending(x => x);
 const int t2 = 10;
 const int t3 = 4;
   var data3 = from x1 in d2
                        select new { ch = Convert.ToString(x1, 2), x2 = Convert.ToString(x1 / t2, 2), x3 = Convert.ToString(x1 % t2, 2), x4 = Convert.ToString((x1 % t2) / t3, 2), x5 = Convert.ToString((x1 % t2) % t3, 2) };

            foreach (var x in data3.Where(v => v.x2.Length + v.x4.Length + v.x5.Length > 13))
            {
                Console.WriteLine(x);
            }


Имея 2 константы, можно для 0-9999 хранить их в 13 битах.
0-999999 - в качестве упражнения.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155418
a7exander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впихнуть невпихуемое без дополнительных знаний о источнике и природе исходных данных очевидно нельзя.
Путей решения этой задачи всего два:
- первый это особое кодирование или индекисрование, предполагающее что в исходных данных встречаются не все комбинации, или хотя бы все они не будут исчерпаны при жизни программы. Примерно на это же полагаются люди выбирающие в качестве ключа обычный integer.
- второй путь предполагает возможность хранения дополнительной информации, также как скажем кодировка UTF-8 редко-используемые символы может кодировать большим количеством байтов.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно представить int32 как 32х битный фильтр Блума. При этом мы теряем возможность
обратного преобразования, хотя получаем интерфейс

Код: sql
1.
boolean exists(int a, int b);



Тоесть положили туда два числа сами-знаете-какие и посмотрели что они там лежат. Опять-же
зная какие они.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a7exanderВпихнуть невпихуемое без дополнительных знаний о источнике и природе исходных данных очевидно нельзя.
Путей решения этой задачи всего два:
- первый это особое кодирование или индекисрование, предполагающее что в исходных данных встречаются не все комбинации, или хотя бы все они не будут исчерпаны при жизни программы. Примерно на это же полагаются люди выбирающие в качестве ключа обычный integer.
- второй путь предполагает возможность хранения дополнительной информации, также как скажем кодировка UTF-8 редко-используемые символы может кодировать большим количеством байтов.
Ну развивая идею. Давайте вспомним старика Шеннона. И предположим что в задаче на самом деле
речь идёт не об обдной паре чисел {a1,b2} а о потоке. И если есть основания говорить что поток
обладает энтропией то ... пожалуйста. Можем эти пары кодировать двумя битами, тремя e.t.c
как выпадет расклад.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155464
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМожно представить int32 как 32х битный фильтр Блума. При этом мы теряем возможность
обратного преобразования, хотя получаем интерфейс

Код: sql
1.
boolean exists(int a, int b);



Тоесть положили туда два числа сами-знаете-какие и посмотрели что они там лежат. Опять-же
зная какие они.


ВОЗМОЖНО, они там лежат
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155549
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИзопропилэто уже не смешно. продемострируй. (естественно все целые от 0 до 999999)
Для 9999
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  var d2 = Enumerable.Range(0, 10000).OrderByDescending(x => x);
 const int t2 = 10;
 const int t3 = 4;
   var data3 = from x1 in d2
                        select new { ch = Convert.ToString(x1, 2), x2 = Convert.ToString(x1 / t2, 2), x3 = Convert.ToString(x1 % t2, 2), x4 = Convert.ToString((x1 % t2) / t3, 2), x5 = Convert.ToString((x1 % t2) % t3, 2) };

            foreach (var x in data3.Where(v => v.x2.Length + v.x4.Length + v.x5.Length > 13))
            {
                Console.WriteLine(x);
            }


Имея 2 константы, можно для 0-9999 хранить их в 13 битах.
0-999999 - в качестве упражнения.
Запустил. Ни одной строчки на экран не вышло. MSVS 2015.

PS Вписать 0-9999 в 13 бит (как и 999999 в 19) это заявка на Нобелевскую премию. Даже с константами. Для справки: 2^13 = 8192

PPS Можешь упростить задачу: вписать 10 значений в 3 бита. Думаю тут на бумаге можно понять всю бесперспективность начинания.
...
Рейтинг: 0 / 0
Два число в одно и обратно
    #39155558
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИмея 2 константы, можно для 0-9999 хранить их в 13 битах.
0-999999 - в качестве упражнения.

попытка впихнуть невпихуемое.
Париж -столица Франции, 2^13= 8192

тремя битами чисо от 0 до 9 - не закодируешь
говнокод даёт коллизию на числах 2,4 и 3,5.
...
Рейтинг: 0 / 0
25 сообщений из 209, страница 2 из 9
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Два число в одно и обратно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]