Форум программистов, компьютерный форум CyberForum.ru

Многочлены над GF(2^m) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
06.11.2012, 02:35     Многочлены над GF(2^m) #1
Пишу кодер Рида-Соломона.
Дано следующее:
* http://www.cyberforum.ru/cgi-bin/latex.cgi?m - количество битов в одном символе (читай, элементов поля http://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m));
* http://www.cyberforum.ru/cgi-bin/latex.cgi?n - длина кода (в символах);
* http://www.cyberforum.ru/cgi-bin/latex.cgi?k - длина сообщения (в символах);
* http://www.cyberforum.ru/cgi-bin/latex.cgi?g(x) - неприводимый многочлен степени http://www.cyberforum.ru/cgi-bin/latex.cgi?n-k над http://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m)
* http://www.cyberforum.ru/cgi-bin/latex.cgi?\overline m - сообщение из 0 и 1 конечной длины.
* http://www.cyberforum.ru/cgi-bin/latex.cgi?u - сообщение, полученное из http://www.cyberforum.ru/cgi-bin/latex.cgi?\overline m путём выделения блоков длины http://www.cyberforum.ru/cgi-bin/latex.cgi?m;
* А также естественное отображение http://www.cyberforum.ru/cgi-bin/latex.cgi?A:GF^n(2^m)\to P_n(GF(2^m)); (\alpha _0\alpha _1...\alpha _{n-1})\mapsto \alpha _0+\alpha _1x+...+\alpha _{n-1}x^{n-1}
На выходе нужно получить РС-код:
* http://www.cyberforum.ru/cgi-bin/latex.cgi?v - код длины http://www.cyberforum.ru/cgi-bin/latex.cgi?n (в символах), по формуле: http://www.cyberforum.ru/cgi-bin/latex.cgi?v=A^{-1}(x^{n-k}(Au)(x)+(x^{n-k}(Au)(x) \mathrm{mod} g(x)))
http://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^m)=\{0,\alpha ^0, \alpha ^1,...,\alpha ^{2^m-2}\}, где http://www.cyberforum.ru/cgi-bin/latex.cgi?g(\alpha )=0.
По теории вроди бы всё, сейчас попробую описать прототип реализации.

Добавлено через 2 часа 17 минут
Посмотрите, пожалуйста!
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef RS_encoder.h
 
#include <vector>
 
const int GROUP_DEGREE = 0; // = m -- порядок группы GF(2^m)
const std::vector<int> PRIMITIVE_POLYNOMIAL (0); // примитивный полином в GF(2^m)
 
class GF 
{
private:
    int alpha_power; // представление в виде степени альфа
    std::vector<int> alpha_vector; // представление в виде вектора
    bool null; // индикатор того, что вектор нулевой
 
    void power_to_vector ();
    void vector_to_power ();
 
public:
    GF ();
    GF (int power); // используем power_to_vector
    GF (std::vector<int> vector); // используем vector_to_power
    ~GF ();
 
    GF operator+ (GF right_hand_side); // сложение
    GF operator* (GF right_hand_side); // умножение
 
    void show_alpha_vector (); //вывод на экран вектора
};
 
#endif

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef GF_polynom.h
 
#include "GF.h"
 
class GF_polynom
{
private:
    std::vector<GF> polynom; // вектор из коэфициентов полинома,
                             // которые принадлежат GF(2^m)
public:
    GF_polynom ();
    GF_polynom (std::vector<GF> coefficients);
    ~GF_polynom ();
 
    GF_polynom operator+ (GF_polynom right_hand_side); // сложение 
    GF_polynom operator* (GF_polynom right_hand_side); // умножение
    GF_polynom operator% (GF_polynom right_hand_side); // остаток от деления
};
 
#endif

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef RS_encoder.h
 
#include "GF_polynom.h"
#include <string>
 
const int CODE_LENGTH = 0; // длина кода
const int MESSAGE_LENGTH = 0; // длина сообщения
 
std::vector<int> str_to_int (std::string str_message); // строку в вектор
std::vector<GF> message_to_GF_message (std::vector<int> message); // вектор из 0 и 1 в 
                                                                  // вектор из элементов GF(2^m)
std::vector<GF> encode (std::vector<GF> GF_message, int n = CODE_LENGTH, int k = MESSAGE_LENGTH); // кодирование сообщения
 
#endif

Я пока не использовал ссылки и модификатор const. Завтра всё доделаю и буду приступать к написанию самих функций. Прокомментируйте, пожалуйста. Спасибо!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 02:35     Многочлены над GF(2^m)
Посмотрите здесь:

C++ Многочлены
C++ Многочлены
C++ списки-многочлены. сложение
C++ Операции над множествами
C++ класс, моделирующий многочлены n – го порядка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 14:20     Многочлены над GF(2^m) #21
В принципе, можно просто вызывать пушбеки. Но тогда может получится ситуация, что вектор будет слишком часто выделять себе новую память. Чтобы этого избежать рекомендуется вначале вызывать reserve. Тогда вектор выделит себе заданное кол-во памяти и в пушбекам не будет выделять дополнительную.
resize нужен тогда, когда требуется создать вектор определенного размера со значениями по умолчанию. т.е. запись std::vector<my_class> vector_name(100); означает, что создается вектор на 100 элементов, у каждого из которых будет вызван конструктор. собственно, если вам эти значения по умолчанию не нужны, то лучше пушбеком пользоваться. Например, тут resize бесполезен:
C++
1
2
3
4
std::vector<my_class> v;
v.resize(100);
for (int i = 0; i < v.size(); ++i)
   v[i] = my_class(i);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 20:34  [ТС]     Многочлены над GF(2^m) #22
Аааа, помогите!!! Программа не хочет правильно умножать многочлены
Пишу такой код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* * * * * * * * * * * * * * * * * * * * * * *
                main.cpp
* * * * * * * * * * * * * * * * * * * * * * */
 
#include <iostream>
#include "RS_encoder.h"
 
int main()
{
    std::string str_mess1, str_mess2;
 
    std::cout << "IT'S POLYNOM TEST" << std::endl << std::endl;
    std::cout << "Group degree = " << GROUP_DEGREE << std::endl;
    std::cout << "Maximum message length = " << MESSAGE_LENGTH * GROUP_DEGREE << " bits" << std::endl;
    std::cout << "Maximum number of errors = " << MAX_ERRORS << " symbols" << std::endl;
    std::cout << "--------------------------------------------" << std::endl;
 
    std::cout << "input 1st message: ";
    std::cin >> str_mess1;
    GF_polynom polynom1 (message_to_GF_message (str_to_int (str_mess1)));
 
    std::cout << std::endl << "input 2nd message: ";
    std::cin >> str_mess2;
    GF_polynom polynom2 (message_to_GF_message (str_to_int (str_mess2)));
 
    std::cout << std::endl << "------------------------------------------" << std::endl;
 
    std::vector<GF> temp_GF_vec (polynom1.return_coefficients());
    
    std::cout << "1st messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    int temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    
    temp_GF_vec = polynom2.return_coefficients();
    
    std::cout << "2nd messege, transformed to polynom:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    GF_polynom polynom3 = polynom1 * polynom2;
 
    temp_GF_vec = polynom3.return_coefficients();
    
    std::cout << "Product of polynom1 and polynom2:" << std::endl;
    std::cout << "degree\tvector\tpower" << std::endl;
    temp_degree = 0;
    for (auto gf_vec_iter = temp_GF_vec.begin(); gf_vec_iter != temp_GF_vec.end(); ++ gf_vec_iter)
    {
        std::cout << temp_degree << "\t";
        std::vector<int> temp_vec (gf_vec_iter->return_alpha_vector());
        for (auto iter = temp_vec.begin(); iter != temp_vec.end(); ++iter)
            std::cout << *iter;
        std::cout << "\t" << gf_vec_iter->return_power() << std::endl;
        ++temp_degree;
    }
 
    std::cin.get();
    std::cin.get();
}

а оно мне неправильно считает. Например:
http://www.cyberforum.ru/cgi-bin/latex.cgi?m=2 и примитивный полином http://www.cyberforum.ru/cgi-bin/latex.cgi?g(x)=x^2+x+1. Тогда, если http://www.cyberforum.ru/cgi-bin/latex.cgi?g(\alpha )=0, то http://www.cyberforum.ru/cgi-bin/latex.cgi?GF(2^2)=\{0,\alpha ^0,\alpha ^1,\alpha ^2\}=\{0,1,\alpha ,1+\alpha \}=\{00,10,01,11\} и http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^3=\alpha ^0. Допустим, наш код не умеет исправлять ошибки (т.е. умеет только их выявлять): http://www.cyberforum.ru/cgi-bin/latex.cgi?t=0, len(M)=2\cdot (2^2-1-2\cdot 0)=2\cdot 3=6. Вводим два сообщения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1=101011=\alpha ^0\alpha ^0\alpha ^2, M_1(x)=\alpha ^0+\alpha ^0x+\alpha ^2 x^2
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_2=110110=\alpha ^2\alpha ^1\alpha ^0, M_2(x)=\alpha ^2 +\alpha ^1x+\alpha ^0x^2
Тогда
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^0\cdot \alpha ^2 + (\alpha ^0\cdot \alpha ^1 +\alpha ^0\cdot \alpha ^2)x+(\alpha ^0\cdot \alpha ^0+\alpha ^0\cdot\alpha ^1+\alpha ^2\cdot \alpha ^2)x^2+(\alpha ^0\cdot\alpha ^0+\alpha ^2\cdot\alpha ^1)x^3+\alpha ^2\cdot\alpha ^0 x^4=
http://www.cyberforum.ru/cgi-bin/latex.cgi?=\alpha ^2+(\alpha ^1+\alpha ^2)x+(\alpha ^0+\alpha ^1+\alpha ^4)x^2+(\alpha ^0+\alpha ^3)x^3+\alpha ^2x^4=
Найдём http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha ^4=\alpha ^{1+3}=\alpha ^1\cdot\alpha ^3=\alpha ^1\cdot\alpha ^0=\alpha ^{1+0}=\alpha ^ 1 и заменим все альфы векторами:
http://www.cyberforum.ru/cgi-bin/latex.cgi?=11+(01+11)x+(10+01+01)x^2+(10+10)x^3+11x^4=11+10x+10x^2+00x^3+11x^4=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4
Т.е.
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^0x+\alpha ^0x^2+\alpha ^2x^4, M_1\cdot M_2=1110100011,
а программа выдаёт
http://www.cyberforum.ru/cgi-bin/latex.cgi?M_1(x)\cdot M_2(x)=\alpha ^2+\alpha ^2x+\alpha ^1x^2+\alpha ^0 x^3+\alpha ^2x^4, M_1\cdot M_2=1111011011
Помогите, пожалуйста!

Добавлено через 10 минут
И ещё вопрос: как вставить в начало массива N нулей. Я делал так:
реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:09     Многочлены над GF(2^m) #23
Цитата Сообщение от vlad_light Посмотреть сообщение
И ещё вопрос: как вставить в начало массива N нулей. Я делал так:
реверсим массив, далее в цикле пушбэкаем N нулей и ещё раз реверсим. Есть какой-то более простой способ?
А в массиве уже есть элементы? думаю, что да. можно использовать метод insert
http://www.cplusplus.com/reference/stl/vector/insert/
точнее, вот такую его реализацию:
C++
1
void insert ( iterator position, size_type n, const T& x );
А по первому вопросу. Могу предложить использовать отладчик и пройти по коду по шагам.
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
10.11.2012, 21:14  [ТС]     Многочлены над GF(2^m) #24
использовать отладчик
я не знаю, что это Можете мне рассказать, где это в МС ВС 2010 есть?
А с инсерт нужно использовать резерв или рисайз?

Добавлено через 2 минуты
C++
1
2
3
4
5
void GF_polynom::shift (const int shift_value)
{
    polynom.reserve (polynom.size() + shift_value);
    polynom.insert (polynom.begin(), shift_value, null_vector);
}
вот так нормально?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 21:30     Многочлены над GF(2^m) #25
Цитата Сообщение от vlad_light Посмотреть сообщение
А с инсерт нужно использовать резерв или рисайз?
Инсерт, по-моему, сам озаботится о выделении памяти. И выделит ее один раз, если нужно. Поэтому можно просто вызывать инсерт.
Да, так нормально.
Отладчик? Нажимайте не F5, а F10 и начнете двигаться в программе по шагам. Если нажать F11, То провалитесь внутрь метода, если F10, то пройдете его, не заходя внутрь.
По-моему, среди прочих кнопок у VS по умолчанию вынесены кнопки для отладки. Хотя в этом уже не уверен)
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 19:11  [ТС]     Многочлены над GF(2^m) #26
Благодарствую:-) будем пробовать...

Добавлено через 21 час 40 минут
Исправил умножение. Сложность была в том, что было сложно разобраться с длинами массивов: массив длины N - это многочлен длины N-1, причём на месте N-2 стоит коэффициент при степени N-1. Короче очень запутано всё получается В итоге надо было в одном месте прибавить, а в другом -- отнять еденичку. Также добавил возможность удалять нули перед умножением, чтоб не делать лишние операции. Умножает вроди как правильно, проверьте граммотность кода, пожалуйста.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
GF_polynom GF_polynom::operator* (const GF_polynom& right_hand_side) const
{   
    GF_polynom left_multiplier (*this);
    GF_polynom right_multiplier (right_hand_side);
 
    while (left_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
        left_multiplier.polynom.pop_back();
 
    while (right_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
        right_multiplier.polynom.pop_back();
 
    GF_polynom prod;
    prod.polynom.reserve (left_multiplier.polynom.size() + right_multiplier.polynom.size() - 1);
 
    for (int k = 0; k < left_multiplier.polynom.size() + right_multiplier.polynom.size() - 1; ++k)
    {
        GF sum (null_vector);
 
        for (int i = std::max (0, k - (int) right_multiplier.polynom.size() + 1); 
                            i <= std::min (k, (int) left_multiplier.polynom.size() - 1); ++i)
            sum = sum + (left_multiplier.polynom.at(i) * right_multiplier.polynom.at(k - i));
 
        prod.polynom.push_back (sum);
    }
 
    return prod;
}

Пошёл разбираться с делением.

Не по теме:

Скажите, а это нормально, что я такого рода код пишу уже целую неделю или это ооочень медленно?

I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 19:47     Многочлены над GF(2^m) #27
Цитата Сообщение от vlad_light Посмотреть сообщение
C++
1
2
3
4
while (left_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
* * * * left_multiplier.polynom.pop_back();
while (right_multiplier.polynom.rbegin()->return_alpha_vector() == null_vector)
* * * * right_multiplier.polynom.pop_back();
Лучше заменить на связку find + erase
Вот накидал вам пример: http://liveworkspace.org/code/f999b0...f5082b0eeb0bae
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
 
template <typename TContent>
void erase_start_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
   auto it = std::find_if(i_vector.begin(), i_vector.end(), [&](const TContent& i){ return i!=null_element; });
   i_vector.erase(i_vector.begin(), it);
}
 
int main()
{
   std::array<int, 5> arr = {{0, 0, 0, 42, 7}};
   std::vector<int> data(arr.cbegin(), arr.cend());
   
   erase_start_nulls(data, 0);
      
   for (int i : data)
      std::cout << i << " ";
   return 0;
}

Собственно, шаблона не пугайтесь) Более того, вы можете взять его в свою программу.

По поводу длительности - ничего в этом плохого нет. Вы параллельно осваиваете математику и язык. Это же непросто

Добавлено через 1 минуту
Цитата Сообщение от vlad_light Посмотреть сообщение
C++
1
i <= std::min (k, (int) left_multiplier.polynom.size() - 1);
Ах да, забыл сказать. Это лучше вытащить в отдельную переменную. Компилятор, конечно, может быть это и оптимизирует, но не факт. Тут же ваши типы данных.
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
11.11.2012, 20:44  [ТС]     Многочлены над GF(2^m) #28
Лучше заменить на связку find + erase
я, если честно, не очень понял, что оно делает Что-то типа: ищем в массиве ноль, фиксируем итератор, а затем удаляем все элементы до этого итератора? Мне нужно с конца нули убрать, тогда оно будет выглядеть:
C++
1
2
3
4
5
auto iter = std::find_if (polynom.rbegin(), polinom.rend(), /*не понял что это*/)
{
  return i != null_vector;
}
polynom.erase (iter, polynom.end());
Вон тот последний параметр -- это, как я понял элемент, который мы ищем, а потом ставим итератор на место найденного элемента, так? И в последней строке нужно писать iter или ++iter ?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 21:36     Многочлены над GF(2^m) #29
Если убрать надо с конца, то тот же код будет выглядеть так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <algorithm>
#include <array>
#include <iostream>
#include <vector>
 
template <typename TContent>
void erase_end_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
   auto rit = std::find_if(i_vector.rbegin(), i_vector.rend(), [&](const TContent& i){ return i!=null_element; });
   if (rit != i_vector.rend())
   {
      i_vector.erase(rit.base(), i_vector.end());
   }
}
 
int main()
{
   std::array<int, 5> arr = {{42, 7, 0, 0, 0}};
   std::vector<int> data(arr.cbegin(), arr.cend());
   
   erase_end_nulls(data, 0);
      
   for (int i : data)
      std::cout << i << " ";
   return 0;
}

Да, идея тут такая - мы находим первый итератор, указывающей не на ноль, а затем удаляем все элементы от/до этого итератора.
можете заменить find_if на обычный цикл, который вам будет гораздо понятнее.
например
C++
1
2
3
4
5
6
7
8
for (auto rit = v.rbegin(); rit != v.rend(); ++rit)
{
   if (*rit != null_element)
   {
      v.erase(rit.base(), v.end());
      break;
   }
}
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 03:54  [ТС]     Многочлены над GF(2^m) #30
Помогите, а то шо-то голова не варит Написал такой код:
C++
1
2
3
4
5
6
7
8
for (auto iter = polynom.rbegin(); iter != polynom.rend(); ++iter)
    {
        if (iter->return_alpha_vector() != null_vector)
        {
            polynom.erase (iter.base(), polynom.end());
            break;
        }
    }
но, если там все нули, то он ничего не делает. Как по-быстренькому сделать так, чтоб он мне все нули, кроме первого удалял?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 10:38     Многочлены над GF(2^m) #31
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename TContent>
void erase_end_nulls(std::vector<TContent>& i_vector, const TContent& null_element)
{
    if (i_vector.empty())return;
    
    for (auto rit = i_vector.rbegin(); rit != i_vector.rend(); ++rit)
    {
        if (*rit != null_element)
        {
            i_vector.erase(rit.base(), i_vector.end());
            return;
        }
    }
    i_vector.erase(std::next(i_vector.begin()), i_vector.end());
}
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
12.11.2012, 21:19  [ТС]     Многочлены над GF(2^m) #32
Меня вот ругают за то, что я использую MS VS 2010 Express. Не подскажите, на каких условиях я его использую (поскольку лицензионное соглашение не читал и найти не могу). В вики написано, что
«Express»-редакции предлагают отлаженную, простую в обучении и использовании среду разработки пользователям, не являющимся профессиональными разработчиками ПО, — любителям и студентам.
Также там написано, что
С апреля 2009 года Microsoft прекратила поддержку всех предыдущих версий Visual Studio Express.
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
12.11.2012, 22:55     Многочлены над GF(2^m) #33
Цитата Сообщение от vlad_light Посмотреть сообщение
Значит ли это, что, например, MS VS 2008 я могу использовать как угодно в своих целях и майкрософт не имеет никаких прав на ПО, которое я разрабатываю в этой среде?
с какого это перепуга? Твоя цитата лишь означает, что если ты найдёшь баг в MSVS2008экспресс, техподдержка MS может пальцем не шевелить в ответ. Разве я не прав?
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 02:23  [ТС]     Многочлены над GF(2^m) #34
Возможно Вы и правы, я не знаю. Просто, если компания прекращает поддержку продукта, то она, тем самым, автоматически разрывает договор с покупателями и, ввиду того, что данный продукт уже купить нельзя, он становиться полностью бесплатным (хотя бы потому, что за него никто ни копейки ни даст). Естественно, сам продукт продавать нельзя, поскольку он запатнетован как продукт. Но использовать его для личного пользования никто не запрещает.
Мне известен такой пример: когда компания близард выпустила варкрафт3, для игры по всемирной сети нужно было ежемесечно вносить некоторую плату. Но, по истечении времени, проект перестал приносить достаточно прибыли и близарды прекратили финансирование проекта и сделали его абсолютно бесплатным.

Добавлено через 2 часа 58 минут
Пожалуйста, посоветуйте IDE, максимально похожую на MS VS. Я с этой eclipse уже замучался: нажимаешь 1 раз -- не работает, 2-ой раз -- работает, потом опять ошибки выдаёт и т.п.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
13.11.2012, 02:55     Многочлены над GF(2^m) #35
vlad_light, а зачем менять иде? почему вас ругают за vs?
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 02:59  [ТС]     Многочлены над GF(2^m) #36
Ну, я в этих делах не спец, но говорят, что разрабатывать "коммерческое ПО" на вс просто так нельзя. Так вот меня интересует, допускает ли express версия это или нет? Мне сказали, что нет, а я читаю-читаю и вроди как да. Вот хочу уточнить.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
13.11.2012, 03:03     Многочлены над GF(2^m) #37
social.msdn.microsoft.com/Forums/ru/2171/thread/4222416b-91b2-42c6-9475-3f40395f76ed
использовать можно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
13.11.2012, 03:38  [ТС]     Многочлены над GF(2^m) #38
Другое дело!

Не по теме:

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

Atlantida
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 1
19.04.2013, 20:31     Многочлены над GF(2^m) #39
vlad_light, очень классный код! Вот только все очень сложно) ты не могу бы объяснить как устроена прога? какие и для чего классы? особенно интересно с точки зрения математики)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 01:06     Многочлены над GF(2^m)
Еще ссылки по теме:

C++ Операции над множествами
Интерполяционный многочлены по чебышевским узлам C++
Построить интерполяционные многочлены Ньютона C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
20.04.2013, 01:06  [ТС]     Многочлены над GF(2^m) #40
Говорю сразу, что это была первоначальная версия и после неё я весь код переписал заново. Писал уже давно, сейчас попробую вспомнить... По классам:
GF_Table - это табличка всех элементов поля GF(n), которая строится с помощью неприводимого многочлена, который мы задаем вручную для каждого n. На практике, как правило, применяется n=8.
GF - класс, представляющий элемент поля GF. Имеет два представления: векторная (через коэффициенты соответствующего полинома) и целочисленная (через соответствующую степень первообразного корня). Определены операции, позволяющие переходить от одной формы записи к другой. Обе формы нужны для операций +(векторная) и *(целочислнная).
Polynom - класс многочленов. Тут особо нечего рассказать...
RS_encoder - кодер Рида-Соломона. Все формулы лучше посмотреть в Б. Скляр - Цифровая связь, 2 глава, Коды Рида-Соломона.
Вообщем, это был мой первый опыт написания кода, поэтому тогда размышлял примерно так:
- написать класс для управлением элементами поля GF (операции +, *)
- написать класс для многочленов
- использовать предыдущие 2 класса для написания кодера/декодера
Как-то так... Если будут конкретные вопросы -- постараюсь ответить...
Yandex
Объявления
20.04.2013, 01:06     Многочлены над GF(2^m)
Ответ Создать тему
Опции темы

Текущее время: 23:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru