Понедельник, 16 Мая 2022, 22:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Вычислить размер большОго файла [Комбинаторика]
Вычислить размер большОго файла [Комбинаторика]
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 ГБ комбинаций, я решил отменить это все biggrin

Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
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 + " ПБ.");
  }
}


Жизнь игра, и мы в ней пешки... А я кушаю пельмешки)
Форум игроделов » Программирование » C/C++ » Вычислить размер большОго файла [Комбинаторика]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг