Страница 1 из 4

[Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 08 фев 2010, 08:00
mzu2006
Уважаемые пользователи ресурса LabVIEW Portal!

Объявляется очередной конкурс под рубрикой "Виртуальный задачник".
подробнее о самом конкурсе здесь

решения лежат здесь

Задача: есть массив двойных слов (U32). Этот массив представляет из себя битовый поток, в котором вплотную записаны целые беззнаковые числа длиной (N<32) бит.
Цель: разработать subVI, выдающую записанные числа в виде отдельного массива U32. Если количество бит в исходном массиве не делится на N нацело, то остаток ("лишние биты") выбрасывается.
Запрещено использовать DLL, CIN, ActiveX, .NET и любые другие внешние по отношению к LabVIEW модули кода.

Пример работы: N=5
Вход:
01010101 01011110 11001010 10101101
01110111 01011101 10010101 10111010
...

Разбиваем
01)(01010)(1 0101)(1110 1)(10010)(10 101)(01101)
0111)(0111 0)(10111)(01 100)(10101) (10111)(010

Выход:
01101
10101
10010
11101
10101
01010
01001
10111
10101
01100
10111
01110
...

То же графически:
Input.png
Input.png (3.62 КБ) 12125 просмотров
преобразуется в
Output1.png
Output1.png (5 КБ) 12108 просмотров
Предоставляется в файле архива:
Шаблон SubVI. (TestVITemplate.vit)
Программа тестирования. (MainTest.vi) Выводит как количество времени, затраченное на выполнение, так и проверяет правильность работы.
Очень медленная реализация. (для сравнения результатов). Dumb.vi
Документация на TestVITemplate (TestVITemplate.rtf).

Оценка:
Зачётный запуск производится на 2-х ядерном AMD x64 (Windows Vista, 32 bit LabVIEW 9.0). Выигрывает программа переработавшая один и тот же
массив из 1000000 элементов за меньшее время на наборе N=1..31. В случае статистической неразличимости результатов разных участников, оценивается
стиль написания блок-диаграммы (компактность) голосованием. VI будет заново скомпилирована перед запуском.

Решения присылать mzu2006 (т.е. мне) до 16 февраля 2010 включительно. Победитель получает медаль за победу в конкурсе по традиционным правилам "Виртуального Задачника".
Тому, кто сократит время выполнения Dumb.vi более чем в 3.5 раза, лично от меня карма.

Дополнительная информация:
Реализация с DLL "в лоб" исполняется в 10 раз быстрее Dumb.vi.
Вопросы задавать в этом топике.

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 08 фев 2010, 09:42
FireFly
Я не понял как
mzu2006 писал(а): 01)(01010)(1 0101)(1110 1)(10010)(10 101)(01101)
0111)(0111 0)(10111)(01 100)(10101) (10111)(010
превращается в
mzu2006 писал(а): 01101
10101
10010
11101
10101
01010
01001
10111
10101
01100
10111
01110

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 08 фев 2010, 20:07
mzu2006
Я имел в виду вот это:
Input.png
Input.png (3.62 КБ) 12128 просмотров
Output.png
Output.png (6.2 КБ) 12125 просмотров

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 08 фев 2010, 20:09
Eugen Graf
Пока выдаёт такой результат. Удивительно, но при N=3 наши ответы не совпадают, остальное работает.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 08 фев 2010, 20:15
mzu2006
Эти ошибки устранены. Спасибо Eg.
Поставь repetitions >1, чтобы показывалась ошибка определения времени
N=3,9 и некоторых других имеет место проблема. Устраню в ближайше время. Пока ориентируйтесь на N=5.

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 08 фев 2010, 20:19
Eugen Graf
Вот

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 08 фев 2010, 20:22
mzu2006
Здорово, оптимизируй и присылай решение!

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 08 фев 2010, 20:45
Eugen Graf
По-моему ты ошибся в подведении итога, т.к. моё решение работает в 5 раз медленнее твоего, а показатель "improved by, %" выдаёт 500.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 08 фев 2010, 22:29
mzu2006
Небольшие корректировки к конкурсу.
1. Если количество бит в исходном массиве не делится на N нацело, то остаток ("лишние биты") выбрасывается.

2. Откорректирована dumb.vi в соответствии номером 1.

3. Индикатор "Improved by, %" следует читать "Time, compared to Dumb.vi". Соответственно косметически изменена программа тестирования.

Обновлены файлы в архиве в первом посте и внесены косметические изменения в сам пост.

Спасибо, Eg.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 10 фев 2010, 03:50
mzu2006
Итак два дня уже прошли и мы имеем одно конкурсное решение. С нетерпением ждём остальных.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 12 фев 2010, 06:51
mzu2006
3 дня до кончания конкурса и уже есть целых 2 решения !!!

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 12 фев 2010, 08:37
Pavel Krivozubov
А почему три дня осталось? Ведь по правилам конкурса - он длится девять дней, т.е. конкурс должен идти не до 14-го, а до 16-го, а в среду 17-го должны выкладываться варианты и запускаться голосовалка. Которая в свою очередь длится до пятницы, а в пятницу 19-го февраля в 16.00 объявляется победитель.

Re: [Задача] Разбить битовый массив [до 14.02.2010]

Добавлено: 12 фев 2010, 14:02
Eugen Graf
Класс, два решения это уже хорошо, интересно посмотреть на второе и на образец.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 15 фев 2010, 06:26
mzu2006
Начинается новая неделя. До конца конкурса 2 дня. У нас уже 3 решения.

Re: [Задача] Разбить битовый массив [до 16.02.2010]

Добавлено: 15 фев 2010, 09:23
FireFly
Пока добился только 193% при N=5 :think: