{"action":"created","issue":{"url":"https://api.github.com/repos/yegor256/jpeek/issues/202","repository_url":"https://api.github.com/repos/yegor256/jpeek","labels_url":"https://api.github.com/repos/yegor256/jpeek/issues/202/labels{/name}","comments_url":"https://api.github.com/repos/yegor256/jpeek/issues/202/comments","events_url":"https://api.github.com/repos/yegor256/jpeek/issues/202/events","html_url":"https://github.com/yegor256/jpeek/pull/202","id":298233999,"number":202,"title":"(#119) LCC and Transitive Closures","user":{"login":"rexim","id":165283,"avatar_url":"https://avatars3.githubusercontent.com/u/165283?v=4","gravatar_id":"","url":"https://api.github.com/users/rexim","html_url":"https://github.com/rexim","followers_url":"https://api.github.com/users/rexim/followers","following_url":"https://api.github.com/users/rexim/following{/other_user}","gists_url":"https://api.github.com/users/rexim/gists{/gist_id}","starred_url":"https://api.github.com/users/rexim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rexim/subscriptions","organizations_url":"https://api.github.com/users/rexim/orgs","repos_url":"https://api.github.com/users/rexim/repos","events_url":"https://api.github.com/users/rexim/events{/privacy}","received_events_url":"https://api.github.com/users/rexim/received_events","type":"User","site_admin":false},"labels":[{"id":817606671,"url":"https://api.github.com/repos/yegor256/jpeek/labels/scope","name":"scope","color":"3a6622","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2018-02-19T10:57:06Z","updated_at":"2018-02-19T13:31:31Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/yegor256/jpeek/pulls/202","html_url":"https://github.com/yegor256/jpeek/pull/202","diff_url":"https://github.com/yegor256/jpeek/pull/202.diff","patch_url":"https://github.com/yegor256/jpeek/pull/202.patch"},"body":"As per #119\r\n\r\nThe assumption made in #119 is absolutly incorrect. Changes made in #106 are not needed to calculate `indirectly-related-pairs`. See section 3.1 of https://pdfs.semanticscholar.org/672e/de6e3e600eafd84036a0b983b88e481ac626.pdf. The key sentence is\r\n\r\n> The indirect connection relation is the **transitive closure** of direct connection relation\r\n\r\nSee https://en.wikipedia.org/wiki/Transitive_closure for more info on what is a Transitive Closure. Basically, if you have a graph of relationships define by adjacency pairs:\r\n\r\n```\r\ngraph:\r\n  a - b\r\n  b - c\r\n  b - d\r\n  c - e\r\n```\r\n\r\nthat looks like this:\r\n\r\n```\r\n     c--e\r\n    /\r\na--b\r\n    \\\r\n     d\r\n```\r\n\r\nA transitive closure of that graph is simply an extention of adjacency pairs list with transitively reachable verticies:\r\n\r\n```\r\ngraph:\r\n  // original pairs\r\n  a - b\r\n  b - c\r\n  b - d\r\n  c - e\r\n  // \"transitive extension\"\r\n  a - c\r\n  a - e\r\n  a - d\r\n  b - e\r\n```\r\n\r\nCalculating `indirectly-related-pairs` has nothing to do with the methods calling each other (see #106). `indirectly-related-pairs` must be calculated in terms of `directly-related-pairs`. We need to apply a Transitive Closure Algorithm on a graph of `directly-related-pairs`.\r\n\r\nA simpliest Transitive Closure algorithms has O(V³) time complexity and involves a mutable V×V table (V is amount of vertices). See https://www.geeksforgeeks.org/transitive-closure-of-a-graph/ for an example. Researching how to fit that into a declartive nature of XSLT looks like outside of the scope of 30 minutes for me."},"comment":{"url":"https://api.github.com/repos/yegor256/jpeek/issues/comments/366693738","html_url":"https://github.com/yegor256/jpeek/pull/202#issuecomment-366693738","issue_url":"https://api.github.com/repos/yegor256/jpeek/issues/202","id":366693738,"user":{"login":"amihaiemil","id":6305156,"avatar_url":"https://avatars0.githubusercontent.com/u/6305156?v=4","gravatar_id":"","url":"https://api.github.com/users/amihaiemil","html_url":"https://github.com/amihaiemil","followers_url":"https://api.github.com/users/amihaiemil/followers","following_url":"https://api.github.com/users/amihaiemil/following{/other_user}","gists_url":"https://api.github.com/users/amihaiemil/gists{/gist_id}","starred_url":"https://api.github.com/users/amihaiemil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amihaiemil/subscriptions","organizations_url":"https://api.github.com/users/amihaiemil/orgs","repos_url":"https://api.github.com/users/amihaiemil/repos","events_url":"https://api.github.com/users/amihaiemil/events{/privacy}","received_events_url":"https://api.github.com/users/amihaiemil/received_events","type":"User","site_admin":false},"created_at":"2018-02-19T13:31:31Z","updated_at":"2018-02-19T13:31:31Z","author_association":"CONTRIBUTOR","body":"@rexim I'll look over you PR soon, let's see then if rultor manages to merge it or if the build will pass with further commits."}}
{"actor":{"display_login":"amihaiemil"}}