Skip to content

Commit 9693079

Browse files
authored
doc: adds a description of Heskel's algorithm.
Refs: #197.
1 parent a2a0800 commit 9693079

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

docs/heskel_algorithm.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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

Comments
 (0)