|
| 1 | +## Последовательность работы |
| 2 | +1. Токенизируем исходный код двух сравниваемых программ; |
| 3 | + |
| 4 | +2. Формируем множества N-gramm двух последовательностей токенов A и B. Величина N вычисляется из размера программ; |
| 5 | + |
| 6 | +3. Вычисляем коэффициент Жаккара по формуле J(A, B) = |A ⋂ B| / |A ∪ B|. Также коэффициент сходства двух программ. |
| 7 | + |
| 8 | +### Пример |
| 9 | + |
| 10 | +1. Пусть есть две последовательности токенов, полученных из двух программ, причем в примере каждый токен представлен типом string: |
| 11 | + - INT_TYPE ID ASSIGN ID MATH_OP ID |
| 12 | + |
| 13 | + - INT_TYPE ID ASSIGN NUMERIC MATH_OP NUMERIC |
| 14 | + |
| 15 | +2. Далее для каждой такой последовательности строим, к примеру, уникальные биграммы: |
| 16 | + - A = {(INT_TYPE, ID), (ID, ASSIGN), (ASSIGN, ID), (ID, MATH_OP), (MATH_OP, ID)} |
| 17 | + |
| 18 | + - B = {(INT_TYPE, ID), (ID, ASSIGN), (ASSIGN, NUMERIC), (NUMERIC, MATH_OP), (MATH_OP, NUMERIC)} |
| 19 | + |
| 20 | +Вычисляем значение коэффициента Жаккара: |
| 21 | + |
| 22 | +$$J(A, B) = \frac{ |
| 23 | + |\\{(INT\\_TYPE,\ ID), (ID,\ ASSIGN)\\}| |
| 24 | +}{ |
| 25 | + |\\{(INT\\_TYPE,\ ID), (ID,\ ASSIGN), (ASSIGN,\ ID), |
| 26 | + (ID,\ MATH\\_OP), (MATH\\_OP,\ ID), (ASSIGN, NUMERIC), |
| 27 | + (NUMERIC,\ MATH\\_OP), (MATH\\_OP,\ NUMERIC)\\}| |
| 28 | +} = \frac{2}{8} = 0.25$$ |
| 29 | + |
| 30 | +### Список литературы |
| 31 | + |
| 32 | +1. [ИНФОРМАЦИОННАЯ СИСТЕМА «ПЛАГИАТ В ПРОГРАММАХ СТУДЕНТОВ»](https://pnu.edu.ru/media/vestnik/articles-2019/025-034_Вихтенко_Э._М._Карманов_Д._А._Син_Д._З..pdf). |
| 33 | + |
| 34 | +2. [ВЫЯВЛЕНИЕ ПЛАГИАТА В ПРОГРАММНОМ КОДЕ C#](http://it-visnyk.kpi.ua/wp-content/uploads/2011/07/53_25.pdf). |
0 commit comments