LINUX.ORG.RU

Странного ли хочется? Бинарная матрица


0

0

Нужно работать с бинарными матрицами (0,1 в ачестве значений). Наверное придется удалять столбцы и точно мучить Гауса с Жорданом, т.е. нужно сложение строк как минимум.

Так вот вопрос: есть ли какая-нибудь библиотека (набор макросов?), которая возьмет на себя ношу опаковки битов в ...не совсем ясно что и всячески упростит работу по доступу к координатам.

Или совсем не стоит заморачиваться с битами, а все держать в чарах?

Задача числодробильная.

★★★★★

Интуиция подсказывает, что если все матрицы фиксированного размера, то можно попытаться и упаковать. А если нужна работа с произволной размерностью, то проще повеситься. Хотя бы на транспонировании.

balodja ★★★
()

>Или совсем не стоит заморачиваться с битами, а все держать в чарах?

Кто ж тебя знает? От объёма данных в основном зависит. Может у тебя там 10х10 - хоть в даблах храни.

anonymous
()

уточню. матрица размерами "тыща" на "полтыщи". транспонировать не надо, она уже "оттранспонирована" как надо!

Pi ★★★★★
() автор топика
Ответ на: комментарий от Pi

Ну, если их и перемножать еще не надо, тогда упаковать -- трех минут задача. Тогда возникает другой резонный вопрос, если не надо перемножать, то скорее всего матриц таких немного, и неужели жалко пары мегабайт на чары?

balodja ★★★
()
Ответ на: комментарий от balodja

алгоритм рандомизированый, поэтому матрица изначально одна, но в случае неудачного старта придется вернуться к первозданной матрице. т.е. нужно клонирование. перемножать не надо. только Gauss–Jordan elimination.

мегабайтов не жалко совершенно, но как оно будет работать быстрее - с битами или чарами?

Pi ★★★★★
() автор топика
Ответ на: комментарий от Pi

>уточню. матрица размерами "тыща" на "полтыщи".

Какой смысл упаковки при таких размерах? Неужто будешь играться на низком уровне, чтобы ускорить обработку?

anonymous
()
Ответ на: комментарий от anonymous

>Неужто будешь играться на низком уровне, чтобы ускорить обработку?

вот! ты понял суть моих страданий :)

Pi ★★★★★
() автор топика

У тебя после сложения матрицы останутся бинарными?

Если да, то на плюсах такое элементарно пишется. Если нет -- то тебе возможно понадобятся даже не чары, а инты.

www_linux_org_ru ★★★★★
()

http://www.digitalmars.com/d/2.0/phobos/std_bitmanip.html#BitArray - упакованный массив битов.

Или в Tango: http://www.dsource.org/projects/tango/docs/current/tango.core.BitArray.html

Чтобы посмотреть исходники - кликни на больших синих буквах вверху. :) Если соответствующие инструкции (bt, bts и т.д.) поддерживаются процессором, то будут использованы.

Если нет желания учить ещё один язык, то, хотя бы, скажи какие уже знаешь.

naryl ★★★★★
()
Ответ на: комментарий от naryl

У матрицы бит будет тип BitArray[], но работа с ним ничем не отличается от int[][]. Все обычные операторы работают.

naryl ★★★★★
()
Ответ на: комментарий от Pi

Твоя основная операция - сложение строк. Вот и пакуй каждую строку как несколько юинтов (битности по вкусу и процессору) и ксорь их для сложения.

grob ★★★★★
()
Ответ на: комментарий от grob

я услышал то, что хотел - спасибо!

Pi ★★★★★
() автор топика
Ответ на: комментарий от grob

> Вот и пакуй каждую строку как несколько юинтов

ЕМНИП и в C/C++ что-то для этого было. Неужели так охота изобретать велосипед?

naryl ★★★★★
()
Ответ на: комментарий от Pi

> мегабайтов не жалко совершенно, но как оно будет работать быстрее - с битами или чарами?

А ты напиши и сравни. Есть предположение, что если обращений по индексу много, то будут рулить чары, а если много ксоров -- то биты.

gaa ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.