Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Пример работы)
(Пример работы)
Строка 86: Строка 86:
  
  
 +
Инициализация массива <tex>d</tex>.
  
Инициализация массива <tex>d</tex>.
 
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 108: Строка 108:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 116: Строка 116:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 124: Строка 124:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 132: Строка 132:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 140: Строка 140:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 149: Строка 149:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 167: Строка 167:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 175: Строка 175:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 183: Строка 183:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 191: Строка 191:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 199: Строка 199:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 208: Строка 208:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 226: Строка 226:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 234: Строка 234:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 242: Строка 242:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 250: Строка 250:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 258: Строка 258:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 267: Строка 267:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 285: Строка 285:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 293: Строка 293:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 301: Строка 301:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 309: Строка 309:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 317: Строка 317:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 326: Строка 326:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 344: Строка 344:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 352: Строка 352:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 360: Строка 360:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 368: Строка 368:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 376: Строка 376:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 384: Строка 384:
 
| align="center"| ●  
 
| align="center"| ●  
 
|}
 
|}
 
 
{| clear="both" |}
 
{| clear="both" |}
  
 
Заполнение массива <tex>d</tex>.
 
Заполнение массива <tex>d</tex>.
 +
  
 
{| clear="both" |}
 
{| clear="both" |}
Строка 395: Строка 395:
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 413: Строка 413:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 421: Строка 421:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 429: Строка 429:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 437: Строка 437:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 445: Строка 445:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 454: Строка 454:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 472: Строка 472:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 480: Строка 480:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 488: Строка 488:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 496: Строка 496:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 504: Строка 504:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 513: Строка 513:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 531: Строка 531:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 539: Строка 539:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 547: Строка 547:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 555: Строка 555:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 563: Строка 563:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 572: Строка 572:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 590: Строка 590:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 598: Строка 598:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 606: Строка 606:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 614: Строка 614:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 622: Строка 622:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 631: Строка 631:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 649: Строка 649:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 657: Строка 657:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 665: Строка 665:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 673: Строка 673:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 681: Строка 681:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 695: Строка 695:
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 713: Строка 713:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 721: Строка 721:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 729: Строка 729:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 737: Строка 737:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 745: Строка 745:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 754: Строка 754:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 772: Строка 772:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 780: Строка 780:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 788: Строка 788:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 796: Строка 796:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 804: Строка 804:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 813: Строка 813:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 831: Строка 831:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 839: Строка 839:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 847: Строка 847:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 855: Строка 855:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 863: Строка 863:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 872: Строка 872:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 890: Строка 890:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 898: Строка 898:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 906: Строка 906:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 914: Строка 914:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 922: Строка 922:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 931: Строка 931:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 949: Строка 949:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 957: Строка 957:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 965: Строка 965:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 973: Строка 973:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 981: Строка 981:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 995: Строка 995:
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1013: Строка 1013:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1021: Строка 1021:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1029: Строка 1029:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1037: Строка 1037:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1045: Строка 1045:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1054: Строка 1054:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1072: Строка 1072:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1080: Строка 1080:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1088: Строка 1088:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1096: Строка 1096:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1104: Строка 1104:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1113: Строка 1113:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 1131: Строка 1131:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1139: Строка 1139:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1147: Строка 1147:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1155: Строка 1155:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1163: Строка 1163:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1172: Строка 1172:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1190: Строка 1190:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1198: Строка 1198:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1206: Строка 1206:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1214: Строка 1214:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1222: Строка 1222:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1231: Строка 1231:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1249: Строка 1249:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1257: Строка 1257:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1265: Строка 1265:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1273: Строка 1273:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1281: Строка 1281:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1295: Строка 1295:
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1313: Строка 1313:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1321: Строка 1321:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1329: Строка 1329:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1337: Строка 1337:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1345: Строка 1345:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1354: Строка 1354:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1372: Строка 1372:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1380: Строка 1380:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1388: Строка 1388:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1396: Строка 1396:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1404: Строка 1404:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1413: Строка 1413:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 1431: Строка 1431:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1439: Строка 1439:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1447: Строка 1447:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1455: Строка 1455:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1463: Строка 1463:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1472: Строка 1472:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1490: Строка 1490:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1498: Строка 1498:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1506: Строка 1506:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1514: Строка 1514:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1522: Строка 1522:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1531: Строка 1531:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1549: Строка 1549:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1557: Строка 1557:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1565: Строка 1565:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1573: Строка 1573:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1581: Строка 1581:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1595: Строка 1595:
  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|A
+
! colspan="7" style="background:#ffdead;"|A
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1613: Строка 1613:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1621: Строка 1621:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1629: Строка 1629:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1637: Строка 1637:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1645: Строка 1645:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1654: Строка 1654:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|B
+
! colspan="7" style="background:#ffdead;"|B
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1672: Строка 1672:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1680: Строка 1680:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1688: Строка 1688:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1696: Строка 1696:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1704: Строка 1704:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1713: Строка 1713:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|C
+
! colspan="7" style="background:#ffdead;"|C
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
| align="center"| ●  
 
| align="center"| ●  
 
|  
 
|  
Строка 1731: Строка 1731:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
|  
 
|  
Строка 1739: Строка 1739:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1747: Строка 1747:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1755: Строка 1755:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1763: Строка 1763:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1772: Строка 1772:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
 
{| border="1" style="width: 150px; height: 150px; float: left;"  
! colspan="7"|D
+
! colspan="7" style="background:#ffdead;"|D
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1790: Строка 1790:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1798: Строка 1798:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1806: Строка 1806:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1814: Строка 1814:
 
| align="center"| ●  
 
| align="center"| ●  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1822: Строка 1822:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  
Строка 1831: Строка 1831:
 
|}
 
|}
 
{| border="1" style="width: 150px; height: 150px; "  
 
{| border="1" style="width: 150px; height: 150px; "  
! colspan="7"|E
+
! colspan="7" style="background:#ffdead;"|E
 
|-
 
|-
!  
+
! style="background:#efefef;"|
! 1
+
! style="background:#efefef;"|1
! 2
+
! style="background:#efefef;"|2
! 3
+
! style="background:#efefef;"|3
! 4
+
! style="background:#efefef;"|4
! 5
+
! style="background:#efefef;"|5
! 6
+
! style="background:#efefef;"|6
 
|-
 
|-
! 1
+
! style="background:#efefef;"|1
 
|  
 
|  
 
|  
 
|  
Строка 1849: Строка 1849:
 
|  
 
|  
 
|-
 
|-
! 2
+
! style="background:#efefef;"|2
 
|  
 
|  
 
| align="center"| ●  
 
| align="center"| ●  
Строка 1857: Строка 1857:
 
|  
 
|  
 
|-
 
|-
! 3
+
! style="background:#efefef;"|3
 
|  
 
|  
 
|  
 
|  
Строка 1865: Строка 1865:
 
|  
 
|  
 
|-
 
|-
! 4
+
! style="background:#efefef;"|4
 
|  
 
|  
 
|  
 
|  
Строка 1873: Строка 1873:
 
|  
 
|  
 
|-
 
|-
! 5
+
! style="background:#efefef;"|5
 
|  
 
|  
 
|  
 
|  
Строка 1881: Строка 1881:
 
|  
 
|  
 
|-
 
|-
! 6
+
! style="background:#efefef;"|6
 
|  
 
|  
 
|  
 
|  

Версия 20:36, 5 ноября 2014

Задача:
Пусть дана контекстно-свободная грамматика [math]\Gamma[/math] в нормальной форме Хомского и слово [math]w \in \Sigma^{*}[/math]. Требуется выяснить, выводится ли это слово в данной грамматике.


Контекстно-свободная грамматика

Определение:
Контекстно-свободная грамматика (КС-грамматика, бесконтекстная грамматика) — способ описания формального языка, представляющий собой четверку

[math]\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle[/math], где:

  • [math]\Sigma[/math]алфавит, элементы которого называют терминалами (англ. terminals)
  • [math]N[/math] — множество, элементы которого называют нетерминалами (англ. nonterminals)
  • [math]S[/math] — начальный символ грамматики (англ. start symbol)
  • [math]P[/math] — набор правил вывода (англ. production rules или productions) вида [math]A \rightarrow B_1 B_2 ... B_n[/math], где [math]A \in N[/math], [math]B_i \in \Sigma \cup N[/math], то есть у которых левые части — одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.


Пример

Терминалы [math]\Sigma = \{(, )\}[/math].

Нетерминалы [math]N = \{S\}[/math].

Правила вывода [math]P[/math]:

[math]\begin{array}{l l} S \rightarrow \varepsilon\\ S \rightarrow SS\\ S \rightarrow (S)\\ \end{array}[/math]

Данная грамматика задает язык правильных скобочных последовательностей. Например, последовательность [math](()(()))[/math] может быть выведена следующим образом:

[math] S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) [/math]

Нормальная форма Хомского

Нормальная форма Хомского - нормальная форма КС-грамматик, в которой все продукции имеют вид:

  • A → a, где A - нетерминал, а a - терминал
  • A → BC, где A, B, C - нетерминалы, причем B и C не являются начальными нетерминалами
  • S → ε, где S - начальный нетерминал и ε - пустая строка (данная продукция необходима, если в языке присуствует пустая строка)

Можно показать, что любую КС-грамматику можно привести к нормальной форме Хомского, поэтому алгоритм является в этом плане универсальным.

Алгоритм

Алгоритм Кока-Янгера-Касами (англ. Cocke-Younger-Kasami algorithm, англ. CYK-алгоритм) — универсальный алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Будем решать задачу динамическим программированием. Дана строка [math]w[/math] размером [math]n[/math]. Заведем для неё трехмерный массив [math]d[/math] размером [math]|N| \times n \times n[/math], состоящий из логических значений, и [math]d[A][i][j] = true[/math] тогда и только тогда, когда из нетерминала [math]A[/math] правилами грамматики можно вывести подстроку [math]w[i \dots j][/math].

Рассмотрим все пары [math]\lbrace \langle j, i \rangle | j-i=m \rbrace[/math], где [math]m[/math] — константа и [math]m \lt n[/math].

  • [math]i = j[/math]. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки [math]w[/math]. В таком случае [math]d[A][i][i] = true[/math], если в грамматике [math]\Gamma[/math] присутствует правило [math]A \rightarrow w[i][/math]. Иначе [math]d[A][i][i] = false[/math].
  • [math]i \ne j[/math]. Значения для всех нетерминалов и пар [math]\lbrace \langle j', i' \rangle | j' - i' \lt m \rbrace[/math] уже вычислены, поэтому [math]d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j][/math]. То есть, подстроку [math]w[i \dots j][/math] можно вывести из нетерминала [math]A[/math], если существует продукция вида [math]A \rightarrow BC[/math] и такое [math]k[/math], что подстрока [math]w[i \dots k][/math] выводима из [math]B[/math], а подстрока [math]w[k + 1 \dots j][/math] выводится из [math]C[/math].

CYK rule 2.jpg

После окончания работы значение [math]d[S][1][n][/math] содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где [math]S[/math] — начальный символ грамматики.

Модификации

Количество способов вывести слово

Если массив будет хранить целые числа, а формулу заменить на [math]d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j][/math], то [math]d[A][i][j][/math] — количество способов получить подстроку [math]w[i \dots j][/math] из нетерминала [math]A[/math].

Минимальная стоимость вывода слова

Пусть [math]H(A \rightarrow BC)[/math] — стоимость вывода по правилу [math]A \rightarrow BC[/math]. Тогда, если использовать формулу [math]d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1} ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) )[/math], то [math]d[A][i][j][/math] — минимальная стоимость вывода подстроки [math]w[i \dots j][/math] из нетерминала [math]A[/math].

Таким образом, задача о выводе в КС-грамматике в нормальной форме Хомского является частным случаем задачи динамического программирования на подотрезке.

Асимптотика

Обработка правил вида [math]A \rightarrow w[i][/math] выполняется за [math]O(n \cdot |\Gamma|)[/math].

Проход по всем подстрокам выполняется за [math]O(n^2)[/math]. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за [math]O(n \cdot |\Gamma|)[/math]. В итоге получаем конечную сложность [math]O(n^3 \cdot |\Gamma|)[/math].

Следовательно, общее время работы алгоритма — [math]O(n^3 \cdot |\Gamma|)[/math]. Кроме того, алгоритму требуется память на массив [math]d[/math] объемом [math]O(n^2 \cdot |N|)[/math], где [math]|N|[/math] — количество нетерминалов грамматики.

Пример работы

Дана грамматика правильных скобочных последовательностей [math]\Gamma[/math] в нормальной форме Хомского.

[math]\begin{array}{l l} A \rightarrow \varepsilon|BB|CD\\ B \rightarrow BB|CD\\ C \rightarrow (\\ D \rightarrow BE|)\\ E \rightarrow )\\ \end{array}[/math]

Дано слово [math]w = $()(())$[/math].


Инициализация массива [math]d[/math].


A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6
Заполнение массива [math]d[/math].
Итерация [math]m = 1[/math].
A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6
Итерация [math]m = 2[/math].
A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6
Итерация [math]m = 3[/math].
A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6
Итерация [math]m = 4[/math].
A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6
Итерация [math]m = 5[/math].
A
1 2 3 4 5 6
1
2
3
4
5
6
B
1 2 3 4 5 6
1
2
3
4
5
6
C
1 2 3 4 5 6
1
2
3
4
5
6
D
1 2 3 4 5 6
1
2
3
4
5
6
E
1 2 3 4 5 6
1
2
3
4
5
6

См. также

Источники информации