Вычислить размер большОго файла [Комбинаторика]
|
|
vasua99 | Дата: Среда, 05 Декабря 2012, 23:11 | Сообщение # 1 |
GNU follower
Сейчас нет на сайте
| Привет всем. Подскажите как вычислить выходной обьем файла для такой задачи - из 61 символа составлены все возможные комбинации длиной от 1 до 18 символов включительно.Добавлено (05.12.2012, 23:11) --------------------------------------------- А то уже 10 мин работы программы и 4 ГБ забитого места(
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
falcoware | Дата: Среда, 05 Декабря 2012, 23:22 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| А зачем заливать файл на диск?
Проще создать буффер 4М в памяти и удалять его когда заполняется. А вообще есть статистическая формула.
18!(Факториал)*61. Кажется так.
То есть 390544796049408000 байт. Хотя не уверен.
Сообщение отредактировал falcoware - Среда, 05 Декабря 2012, 23:39 |
|
| |
vasua99 | Дата: Среда, 05 Декабря 2012, 23:37 | Сообщение # 3 |
GNU follower
Сейчас нет на сайте
| В такой случае, мой комп будет генерировать это лет 20(18! * 62 различных комбинаций)
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
Фил | Дата: Пятница, 07 Декабря 2012, 09:55 | Сообщение # 4 |
Томатный революционер
Сейчас нет на сайте
| vasua99, а зачем генерировать, если тебе дали готовую формулу?
|
|
| |
ShadowZi | Дата: Пятница, 07 Декабря 2012, 10:23 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Легко посчитать, посмотри сколько байт требует для хранения 1-ого такого числа (у тебя 18 знаков, этого достаточно чтобы узнать), а затем умножь количество байт на количество комбинаций)
hint в один байт те 8 битов, можно закодировать 2 в восьмой степени комбинаций минус одно -1, то есть максимум 255, в два байта то есть в 16 бит, можно закодировать 2 в 16 минус 1 степени комбинаций 65 535, в 3 байта 2 в 24 минус 1 -> 16 777 215 и так далее.
Сообщение отредактировал ShadowZi - Пятница, 07 Декабря 2012, 10:27 |
|
| |
SEvg | Дата: Пятница, 07 Декабря 2012, 12:55 | Сообщение # 6 |
Алхимик
Сейчас нет на сайте
| Не совсем понял, что надо может поможет...
Вот формула, для определения количества комбинаций из n чисел, по m штук. n!/(m! (n-m)!)
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 07 Декабря 2012, 14:30 | Сообщение # 7 |
участник
Сейчас нет на сайте
| Какие-то странные формулы тут насоветовали. Если уж совсем по-тупому ее выводить, то получится: комбинаций. Quote (ShadowZi) в один байт те 8 битов, можно закодировать 2 в восьмой степени комбинаций минус одно -1, то есть максимум 255, Почему минус одно? Quote (SEvg) n!/(m! (n-m)!) Эта формула дает число сочетаний (одинаковых символов в одной комбинации нет, короче говоря), очевидно, она не подходит для данной задачи.
|
|
| |
ShadowZi | Дата: Пятница, 07 Декабря 2012, 14:33 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Quote (RUNGOGET2THECHOPAH) Почему минус одно? 0 про ноль не забываем), я писал там не кол-во комбинаций а максимальное число)
|
|
| |
vasua99 | Дата: Пятница, 07 Декабря 2012, 14:47 | Сообщение # 9 |
GNU follower
Сейчас нет на сайте
| Короче, после того, как комп сгенерировал 15 ГБ комбинаций, я решил отменить это все
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |
ShadowZi | Дата: Пятница, 07 Декабря 2012, 14:48 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| и правильно, осталось тебе посчитать сколько байт понадобиться для 18 знаков и умножить на количество комбинаций) и получишь вес в байтах
|
|
| |
linux | Дата: Пятница, 07 Декабря 2012, 14:49 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Тут и считать не чего, очевидно что в файл не влезет... Если только несколько винтов объеденять и брать специальную файловую систему. Обычному компьютеру не под силу, на полнить файл всеми комбинациями...
А зачем это надо, наверняка есть другой путь решения поставленной задачи (я не про объём файла, а про задачу в целом).
|
|
| |
mobipak | Дата: Пятница, 07 Декабря 2012, 15:40 | Сообщение # 12 |
Подрывник
Сейчас нет на сайте
| Ну, вообще дело идёт о биноминальных коофицентах. Короче, N = 61, M = 18, тогда можно выбрать комбинаций. Теперь вычисляешь M=17, 16, 15... комбинаций. Видно, что количество комбинаций огромно.
Добавлено (07.12.2012, 15:40) --------------------------------------------- Что-то меня несёт... Ну а всего будет... Теперь умножь это на 261 и получишь искомое количество байт.
Сообщение отредактировал mobipak - Суббота, 08 Декабря 2012, 11:03 |
|
| |
vasua99 | Дата: Пятница, 07 Декабря 2012, 21:36 | Сообщение # 13 |
GNU follower
Сейчас нет на сайте
| Ну уж нет... 153295859422339982573753437979644 Петабайт я пожертвовать не согласен :D(BigInteger рулит(те, кто учат или знают C# или Java поймут о чем я) Добавлено (07.12.2012, 21:36) ---------------------------------------------
Code import java.math.BigInteger;
public class Compute { public static void main(String[] args) { BigInteger i = new BigInteger("76647929711169991286876718989822"); i = i.multiply(new BigInteger("2").pow(61)).divide(new BigInteger("1024").pow(6)); System.out.println("Размер файла: " + i + " ПБ."); } }
Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
|
|
| |