{"id":2204,"date":"2015-02-23T14:52:22","date_gmt":"2015-02-23T13:52:22","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=2204"},"modified":"2015-02-23T14:52:41","modified_gmt":"2015-02-23T13:52:41","slug":"c-cyk","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=2204","title":{"rendered":"c++ CYK implementation"},"content":{"rendered":"<p>Die Wikipedia Artikel zum Cocke-Younger-Kasami-Algorithmu kann man vergessen. Man kapiert nichts. Hab auf youtube ein 15min Video [1] von Benny Neugebauer dazu gefunden. Wunderbar, alles gleich verstanden :)<br \/>\nHab ihn mal schnell in C++ implementiert. Hier die Hauptschleife:<\/p>\n<pre><code>\r\n    \/*\r\n    F\u00fcr j = 2 ... n\r\n      F\u00fcr i = 1 ... n - j + 1\r\n        F\u00fcr k = 1 ... j - 1\r\n          Setze V_{i,j} := V_{i,j} + { l | \\exists B,C in N ((l -> BC) in P and B in V_{i,k} and C in V_{i + k, j - k}) \\}\r\n\r\n    Falls S \\in V_{1,n}, stoppe und gib \"w wird von G erzeugt\" aus\r\n    Stoppe und gib \"w wird nicht von G erzeugt\" aus\r\n    *\/\r\n    for(size_t row=1; row < n; row++) {\r\n\/\/        cout << \"row \" << row << \"\\n\";\r\n        for(size_t col=0; col < n-row; col++) {\r\n\/\/            cout << \"col \" << col << \"\\n\";\r\n            for(size_t k=0; k < row; k++) {\r\n                const auto &e1 = V.at(k, col);\r\n                const auto &e2 = V.at(row-k-1, col+k+1);\r\n\r\n                for(size_t i=0; i < e1.size(); i++) {\r\n                    for(size_t j=0; j < e2.size(); j++) {\r\n\/\/                        cout << \"Check \" << e1.at(i) << \" \" << e2.at(j) << \"\\n\";\r\n                        const Production::String toTest({e1.at(i), e2.at(j)});\r\n                        for(const Production& p : P) {\r\n                            if(p.right == toTest) {\r\n                                \/\/ uniq append\r\n                                if(contains(V.at(row, col), p.left) == false) {\r\n                                    V.at(row, col).push_back(p.left);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n<\/code><\/pre>\n<p>F\u00fcr jeden Matrixeintrag in der oberen linken Dreiecksmatrix:<br \/>\nF\u00fcr jeden Eintrag oberhalt in der Spalte und Diagonal nach oben:<br \/>\nSchaue nach ob die Konkatenation der beiden Eintr\u00e4ge in der rechten Seite der Produktionsregeln vorkommen:<br \/>\nJa) Linke Seite der Produktion in die Matrix eintragen.<\/p>\n<p>Steht am Ende in der letzten Zeile, erste Spalte das Startsymbol, dann kann das Wort erkannt werden.<\/p>\n<p><a href=\"http:\/\/roboblog.fatal-fury.de\/wp-content\/uploads\/2015\/02\/CYK.zip\">CYK.zip<\/a><\/p>\n<p>[1] https:\/\/www.youtube.com\/watch?v=JugIgxUyA4Q<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Wikipedia Artikel zum Cocke-Younger-Kasami-Algorithmu kann man vergessen. Man kapiert nichts. Hab auf youtube ein 15min Video [1] von Benny Neugebauer dazu gefunden. Wunderbar, alles gleich verstanden :) Hab ihn mal schnell in C++ implementiert. Hier die Hauptschleife: \/* F\u00fcr j = 2 ... n F\u00fcr i = 1 ... n - j + 1 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-2204","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2204"}],"version-history":[{"count":4,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2204\/revisions"}],"predecessor-version":[{"id":2209,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/2204\/revisions\/2209"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2204"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}