2010-02-24 1 views
1

Я хава прочитал соответствующий вопрос здесь link textРабота с гигантской матрицей с Java

Он был предложен там работать с гигантским файлом, а затем использовать RandomAccessFile.

Моя проблема заключается в том, что матрица (состоящая из «0» и «1», а не редкая) может быть действительно огромной. Например, размер строки может быть 10^10000. Мне нужен эффективный способ хранения такой матрицы. Кроме того, мне нужно работать с таким файлом (если бы я сохранил в нем свою матрицу) таким образом:

Скажем, у меня есть гигантский файл, содержащий последовательности чисел. Числа в последовательности делятся на «,» (первое число показывает исходное число, остальные цифры показывают места в матрице, где «1» остается). Последовательности делятся на символ «|». Кроме того, есть символ «||» которые делят все последовательности на две группы. (это представление о двух матрицах. Может быть, оно неэффективно, но я не знаю, как улучшить его. У вас есть идеи? =)) Мне нужно прочитать, например, 100 номеров из каждая строка из первой группы (извлеките подматрицу) и определите им, какие строки мне нужно читать из второй группы. Мне нужна функция seek(). Будет ли это работать с таким гигантским файлом?

Я новичок. Может быть, есть некоторые эффективные способы хранения и чтения таких данных?

+3

10^10000 ??????? ?? любопытная шутка? – Roman

+0

10^10 000 - огромное количество, я не думаю, что во Вселенной есть достаточно частиц. вы допустили ошибку? – Anycorn

+0

Поскольку Бог закодировал Вселенную в lisp (http://xkcd.com/224/), я настоятельно рекомендую вам искать решения на этом языке. –

ответ

5

В наблюдаемой вселенной имеется около 10^80 атомов. Скажите, что вы можете хранить один бит в каждом атоме, вам нужно около 10^9920 юниверсов примерно того же размера, что и наш. Это просто сохранить один ряд.

Сколько строк вы консьержировали? Вам понадобится 10^9920 юниверсов в строке.

0

Надеюсь, вы имеете в виду 10 000 записей, а не 10^10000 Тогда вы могли бы использовать класс BITSET хранить все в памяти (или вы могли бы использовать что-н., Как hadoop)

+0

Эта проблема взята из криптографии. Матрицы могут быть абсолютно случайными! Любого размера. Есть ли эффективный способ выполнения операций, которые я сделал? Хорошо, может быть, я нагрелся относительно размера матрицы, но это действительно может быть случайным ... Что мне делать? – Dmitry

+0

для больших данных загляните в hadoop или базу данных (или аналогичные технологии для hadopp; bigtable?). Я не знаю, достаточно ли производительности, если вы реализуете собственное решение на основе метода поиска файла(). – Karussell

+0

Но было бы легко использовать базу данных для ввода такой матрицы? Кроме того, знаете ли вы, каков максимальный размер файла, с которым будет работать Java? Я имею в виду использование RandomAccessFile – Dmitry

Смежные вопросы