|
|
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
__Avenger__Добрый вечер! Можно ли запаковать в один Int(4-байта) два числа, первое - не превышает 9999, второе - не превышает 999999? В задаче ничего не сказано про точность поэтому скажу что можно. Вспомните как рабоатют float и double при разрядности 32 и 64 бит они покрывают более широкий диапазон мантиссы чем целые. Хотя гарантируют фиксацию ведущих чисел мантиссы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 01:32 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
запаковать можно, распаковать нельзя ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 09:26 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
__Avenger__Добрый вечер! Можно ли запаковать в один Int(4-байта) два числа, первое - не превышает 9999, второе - не превышает 999999? Если ты точно уверен, что не превышает: 1) миллион должен быть всегда (единичка миллиона это по сути разделитель двух чисел) 2) всё от миллиона до 10010000 - это твоё первое число 3) всё что до миллиона это твоё 2е число 4) всё что больше 10010000 - перебор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 10:38 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
полагаю, речь о положительных числах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 10:40 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Кто-то по прежнему утверждает, что задача имеет решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:04 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ИзопропилКто-то по прежнему утверждает, что задача имеет решение? предложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:16 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Apoj_sqlИзопропилКто-то по прежнему утверждает, что задача имеет решение? предложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :) задача в том, что упаковать нужно все возможные пары(0..9999,0..999999), а не какое-то подмножество ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:35 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Apoj_sqlпредложите в качестве контраргумента пару чисел в рамках условия задачи, которые нельзя впихнуть и я признаю свою неправоту :) как только ты покажешь свои процедуры Pack и Unpack, так сразу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:39 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропилзадача в том, что упаковать нужно все возможные пары(0..9999,0..999999), а не какое-то подмножество посчитал, действительно я не прав. сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:44 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Apoj_sqlполагаю, речь о положительных числах :) Смотрите в корень постановки. В задаче сказано. Можно ли запаковать в один Int(4-байта) два ЧИСЛА , первое - не превышает 9999, второе - не превышает 999999? Обратите внимание. Не целых. Не финансовых. А просто два арифметических числа. Пример чисел: Число Пи, масса электрона и дробь одна третья удовлетворяют условиям. На целое здесь может намекать только формат ограничителей. Но кто скажет что арифметика различает 999999 и 999999.0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 11:55 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
maytonОбратите внимание. Не целых. Не финансовых. А просто два арифметических числа. Подозреваю что это просто два ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 13:55 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonОбратите внимание. Не целых. Не финансовых. А просто два арифметических числа. Подозреваю что это просто два ID. Кажется выше уже проверили что количество сочетаний 2х десятичных ID превышает лимит 32х битного целого. Тоесть в целых числах задача не решается. Возможно были завуалированы какие-то доп-ограничения которые мы не услышали. Например число A всегда меньше числа B. Тогда в сочетаниях появится дырка и возможно задача станет решаемой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2016, 14:00 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Марк, всё-же я думаю что речь шла о целых числах, ибо в первом сообщение тс использовал квалификатор типа Int. SSmiksoft, а если попробовать хранить линейную комбинацию по определённым простым числам, пусть значение этой комбинации будет занимать 8 знаков или 8*3.3 = 27 бит. Этой информации будет скорее всего недостаточно. Потому оставшиеся 5 бит можно использовать для того чтобы хранить, например, разницу в количестве цифр двух чисел. Или что-нибудь ещё, что в дальнейшем поможет дешифровать исходные числа. Это всё в первом приближении, но скорее всего алгоритм позволяющий определенным образом зашифровать два этих числа в одно 32 битное существует Казалось бы что нельзя. Автору требуется (10^10 - e) вариантов, значит при прямой адресации потребует 34 бита. Однако, несмотря на то, что я не нашёл подходящее решение, также не могу найти доказательство того что метод подобный описанному выше не существует. Если решение есть, то одним из возможных путей должен быть следующий алгоритм: 1. 32-k бит используются для того чтобы хранить линейную комбинацию вида: p1*max + p2*min. очевидно будут коллизии 2. k оставшихся бит использовать для устранения этих коллизий. К сожалению я не смог доказать что этот способ должен работать, но и доказать обратного я не смог также. Практически проверить сложно, ибо у меня нет доступа к машине которая может выполнить 10^10 операций достаточно быстро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 08:49 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Всё было проще чем я думал. Доказал что и такой метод не применим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 08:58 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Если речь об ID, которые генерятся счетчиками, то задача легко решается. Надо просто пределы обоих пересмотреть, т.е. не 9999 и 999999, а 4096 и 1048576, или 8192 и 524288 и т.д. Если есть комбинация пределов, устраивающая разработчика - задача решаема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 08:59 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ИзопропилКто-то по прежнему утверждает, что задача имеет решение? Я :) 999999 - можно засунуть в 19 бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 11:15 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВ999999 - можно засунуть в 19 бит. И как? Для справки: 2^19 = 524288 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:12 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВИзопропилКто-то по прежнему утверждает, что задача имеет решение? Я :) 999999 - можно засунуть в 19 бит. это уже не смешно. продемострируй. (естественно все целые от 0 до 999999) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:16 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Изопропил это уже не смешно. продемострируй. (естественно все целые от 0 до 999999) Для 9999 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Имея 2 константы, можно для 0-9999 хранить их в 13 битах. 0-999999 - в качестве упражнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:27 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Впихнуть невпихуемое без дополнительных знаний о источнике и природе исходных данных очевидно нельзя. Путей решения этой задачи всего два: - первый это особое кодирование или индекисрование, предполагающее что в исходных данных встречаются не все комбинации, или хотя бы все они не будут исчерпаны при жизни программы. Примерно на это же полагаются люди выбирающие в качестве ключа обычный integer. - второй путь предполагает возможность хранения дополнительной информации, также как скажем кодировка UTF-8 редко-используемые символы может кодировать большим количеством байтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:30 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
Можно представить int32 как 32х битный фильтр Блума. При этом мы теряем возможность обратного преобразования, хотя получаем интерфейс Код: sql 1. Тоесть положили туда два числа сами-знаете-какие и посмотрели что они там лежат. Опять-же зная какие они. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:48 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
a7exanderВпихнуть невпихуемое без дополнительных знаний о источнике и природе исходных данных очевидно нельзя. Путей решения этой задачи всего два: - первый это особое кодирование или индекисрование, предполагающее что в исходных данных встречаются не все комбинации, или хотя бы все они не будут исчерпаны при жизни программы. Примерно на это же полагаются люди выбирающие в качестве ключа обычный integer. - второй путь предполагает возможность хранения дополнительной информации, также как скажем кодировка UTF-8 редко-используемые символы может кодировать большим количеством байтов. Ну развивая идею. Давайте вспомним старика Шеннона. И предположим что в задаче на самом деле речь идёт не об обдной паре чисел {a1,b2} а о потоке. И если есть основания говорить что поток обладает энтропией то ... пожалуйста. Можем эти пары кодировать двумя битами, тремя e.t.c как выпадет расклад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 12:56 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
maytonМожно представить int32 как 32х битный фильтр Блума. При этом мы теряем возможность обратного преобразования, хотя получаем интерфейс Код: sql 1. Тоесть положили туда два числа сами-знаете-какие и посмотрели что они там лежат. Опять-же зная какие они. ВОЗМОЖНО, они там лежат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 13:16 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВИзопропилэто уже не смешно. продемострируй. (естественно все целые от 0 до 999999) Для 9999 Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Имея 2 константы, можно для 0-9999 хранить их в 13 битах. 0-999999 - в качестве упражнения. Запустил. Ни одной строчки на экран не вышло. MSVS 2015. PS Вписать 0-9999 в 13 бит (как и 999999 в 19) это заявка на Нобелевскую премию. Даже с константами. Для справки: 2^13 = 8192 PPS Можешь упростить задачу: вписать 10 значений в 3 бита. Думаю тут на бумаге можно понять всю бесперспективность начинания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 14:04 |
|
||
|
Два число в одно и обратно
|
|||
|---|---|---|---|
|
#18+
ЕвгенийВИмея 2 константы, можно для 0-9999 хранить их в 13 битах. 0-999999 - в качестве упражнения. попытка впихнуть невпихуемое. Париж -столица Франции, 2^13= 8192 тремя битами чисо от 0 до 9 - не закодируешь говнокод даёт коллизию на числах 2,4 и 3,5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2016, 14:07 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39155446&tid=1340797]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 497ms |

| 0 / 0 |
