4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||||||||||||
1 | ||||||||||||||||
Многочлены над GF(2^m)06.11.2012, 02:35. Показов 4226. Ответов 39
Метки нет (Все метки)
Пишу кодер Рида-Соломона.
Дано следующее: * - количество битов в одном символе (читай, элементов поля ); * - длина кода (в символах); * - длина сообщения (в символах); * - неприводимый многочлен степени над * - сообщение из 0 и 1 конечной длины. * - сообщение, полученное из путём выделения блоков длины ; * А также естественное отображение На выходе нужно получить РС-код: * - код длины (в символах), по формуле: , где . По теории вроди бы всё, сейчас попробую описать прототип реализации. Добавлено через 2 часа 17 минут Посмотрите, пожалуйста! Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Я пока не использовал ссылки и модификатор const. Завтра всё доделаю и буду приступать к написанию самих функций. Прокомментируйте, пожалуйста. Спасибо!!!
0
|
06.11.2012, 02:35 | |
Ответы с готовыми решениями:
39
Найти все неприводимые многочлены второй степени над полем Z5, у которых коэффициент при x^2 равен 1 или 2 Выразить через основные симметрические многочлены моногенные многочлены Многочлены Многочлены |
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
09.11.2012, 14:20 | 21 | |||||
В принципе, можно просто вызывать пушбеки. Но тогда может получится ситуация, что вектор будет слишком часто выделять себе новую память. Чтобы этого избежать рекомендуется вначале вызывать reserve. Тогда вектор выделит себе заданное кол-во памяти и в пушбекам не будет выделять дополнительную.
resize нужен тогда, когда требуется создать вектор определенного размера со значениями по умолчанию. т.е. запись std::vector<my_class> vector_name(100); означает, что создается вектор на 100 элементов, у каждого из которых будет вызван конструктор. собственно, если вам эти значения по умолчанию не нужны, то лучше пушбеком пользоваться. Например, тут resize бесполезен:
0
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
10.11.2012, 20:34 [ТС] | 22 | |||||
Аааа, помогите!!! Программа не хочет правильно умножать многочлены
Пишу такой код: Кликните здесь для просмотра всего текста
а оно мне неправильно считает. Например: и примитивный полином . Тогда, если , то и . Допустим, наш код не умеет исправлять ошибки (т.е. умеет только их выявлять): . Вводим два сообщения: Тогда Найдём и заменим все альфы векторами: Т.е. , а программа выдаёт Помогите, пожалуйста! Добавлено через 10 минут И ещё вопрос: как вставить в начало массива N нулей. Я делал так: реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
10.11.2012, 21:09 | 23 | |||||
А в массиве уже есть элементы? думаю, что да. можно использовать метод insert
http://www.cplusplus.com/refer... or/insert/ точнее, вот такую его реализацию:
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
10.11.2012, 21:14 [ТС] | 24 | |||||
А с инсерт нужно использовать резерв или рисайз? Добавлено через 2 минуты
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
10.11.2012, 21:30 | 25 |
Инсерт, по-моему, сам озаботится о выделении памяти. И выделит ее один раз, если нужно. Поэтому можно просто вызывать инсерт.
Да, так нормально. Отладчик? Нажимайте не F5, а F10 и начнете двигаться в программе по шагам. Если нажать F11, То провалитесь внутрь метода, если F10, то пройдете его, не заходя внутрь. По-моему, среди прочих кнопок у VS по умолчанию вынесены кнопки для отладки. Хотя в этом уже не уверен)
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
11.11.2012, 19:11 [ТС] | 26 | |||||
Благодарствую:-) будем пробовать...
Добавлено через 21 час 40 минут Исправил умножение. Сложность была в том, что было сложно разобраться с длинами массивов: массив длины N - это многочлен длины N-1, причём на месте N-2 стоит коэффициент при степени N-1. Короче очень запутано всё получается В итоге надо было в одном месте прибавить, а в другом -- отнять еденичку. Также добавил возможность удалять нули перед умножением, чтоб не делать лишние операции. Умножает вроди как правильно, проверьте граммотность кода, пожалуйста. Кликните здесь для просмотра всего текста
Пошёл разбираться с делением. Не по теме: Скажите, а это нормально, что я такого рода код пишу уже целую неделю или это ооочень медленно?
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
11.11.2012, 19:47 | 27 | |||||
Лучше заменить на связку find + erase
Вот накидал вам пример: http://liveworkspace.org/code/... 2b0eeb0bae Кликните здесь для просмотра всего текста
Собственно, шаблона не пугайтесь) Более того, вы можете взять его в свою программу. По поводу длительности - ничего в этом плохого нет. Вы параллельно осваиваете математику и язык. Это же непросто Добавлено через 1 минуту Ах да, забыл сказать. Это лучше вытащить в отдельную переменную. Компилятор, конечно, может быть это и оптимизирует, но не факт. Тут же ваши типы данных.
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
11.11.2012, 20:44 [ТС] | 28 | |||||
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|||||||||||
11.11.2012, 21:36 | 29 | ||||||||||
Если убрать надо с конца, то тот же код будет выглядеть так:
Кликните здесь для просмотра всего текста
Да, идея тут такая - мы находим первый итератор, указывающей не на ноль, а затем удаляем все элементы от/до этого итератора. можете заменить find_if на обычный цикл, который вам будет гораздо понятнее. например
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
12.11.2012, 03:54 [ТС] | 30 | |||||
Помогите, а то шо-то голова не варит Написал такой код:
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
12.11.2012, 10:38 | 31 | |||||
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
12.11.2012, 21:19 [ТС] | 32 |
Меня вот ругают за то, что я использую MS VS 2010 Express. Не подскажите, на каких условиях я его использую (поскольку лицензионное соглашение не читал и найти не могу). В вики написано, что
0
|
12.11.2012, 22:55 | 33 |
с какого это перепуга? Твоя цитата лишь означает, что если ты найдёшь баг в MSVS2008экспресс, техподдержка MS может пальцем не шевелить в ответ. Разве я не прав?
0
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
13.11.2012, 02:23 [ТС] | 34 |
Возможно Вы и правы, я не знаю. Просто, если компания прекращает поддержку продукта, то она, тем самым, автоматически разрывает договор с покупателями и, ввиду того, что данный продукт уже купить нельзя, он становиться полностью бесплатным (хотя бы потому, что за него никто ни копейки ни даст). Естественно, сам продукт продавать нельзя, поскольку он запатнетован как продукт. Но использовать его для личного пользования никто не запрещает.
Мне известен такой пример: когда компания близард выпустила варкрафт3, для игры по всемирной сети нужно было ежемесечно вносить некоторую плату. Но, по истечении времени, проект перестал приносить достаточно прибыли и близарды прекратили финансирование проекта и сделали его абсолютно бесплатным. Добавлено через 2 часа 58 минут Пожалуйста, посоветуйте IDE, максимально похожую на MS VS. Я с этой eclipse уже замучался: нажимаешь 1 раз -- не работает, 2-ой раз -- работает, потом опять ошибки выдаёт и т.п.
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
13.11.2012, 02:55 | 35 |
vlad_light, а зачем менять иде? почему вас ругают за vs?
0
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
13.11.2012, 02:59 [ТС] | 36 |
Ну, я в этих делах не спец, но говорят, что разрабатывать "коммерческое ПО" на вс просто так нельзя. Так вот меня интересует, допускает ли express версия это или нет? Мне сказали, что нет, а я читаю-читаю и вроди как да. Вот хочу уточнить.
0
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
13.11.2012, 03:03 | 37 |
social.msdn.microsoft.com/Forums/ru/2171/thread/4222416b-91b2-42c6-9475-3f40395f76ed
использовать можно
1
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
13.11.2012, 03:38 [ТС] | 38 |
Другое дело!
Не по теме: А всё-таки, можете подсказать что-то похожее на всякий случай? Вы же примерно представляете, какого рода программы я буду писать, что для них подойдёт лучше всего?
0
|
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 1
|
|
19.04.2013, 20:31 | 39 |
vlad_light, очень классный код! Вот только все очень сложно) ты не могу бы объяснить как устроена прога? какие и для чего классы? особенно интересно с точки зрения математики)
0
|
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
20.04.2013, 01:06 [ТС] | 40 |
Говорю сразу, что это была первоначальная версия и после неё я весь код переписал заново. Писал уже давно, сейчас попробую вспомнить... По классам:
GF_Table - это табличка всех элементов поля GF(n), которая строится с помощью неприводимого многочлена, который мы задаем вручную для каждого n. На практике, как правило, применяется n=8. GF - класс, представляющий элемент поля GF. Имеет два представления: векторная (через коэффициенты соответствующего полинома) и целочисленная (через соответствующую степень первообразного корня). Определены операции, позволяющие переходить от одной формы записи к другой. Обе формы нужны для операций +(векторная) и *(целочислнная). Polynom - класс многочленов. Тут особо нечего рассказать... RS_encoder - кодер Рида-Соломона. Все формулы лучше посмотреть в Б. Скляр - Цифровая связь, 2 глава, Коды Рида-Соломона. Вообщем, это был мой первый опыт написания кода, поэтому тогда размышлял примерно так: - написать класс для управлением элементами поля GF (операции +, *) - написать класс для многочленов - использовать предыдущие 2 класса для написания кодера/декодера Как-то так... Если будут конкретные вопросы -- постараюсь ответить...
1
|
20.04.2013, 01:06 | |
20.04.2013, 01:06 | |
Помогаю со студенческими работами здесь
40
Многочлены Многочлены Многочлены Многочлены Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |