1
0
Fork 0
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

329 Zeilen
16 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (version 1.7.0_79) on Sun Apr 03 00:28:30 PDT 2016 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>NaiveLcaFinder (JGraphT : a free Java graph library)</title>
<meta name="date" content="2016-04-03">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="NaiveLcaFinder (JGraphT : a free Java graph library)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/NaiveLcaFinder.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../org/jgrapht/alg/MinSourceSinkCut.html" title="class in org.jgrapht.alg"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../org/jgrapht/alg/NeighborIndex.html" title="class in org.jgrapht.alg"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?org/jgrapht/alg/NaiveLcaFinder.html" target="_top">Frames</a></li>
<li><a href="NaiveLcaFinder.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.jgrapht.alg</div>
<h2 title="Class NaiveLcaFinder" class="title">Class NaiveLcaFinder&lt;V,E&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.jgrapht.alg.NaiveLcaFinder&lt;V,E&gt;</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">NaiveLcaFinder&lt;V,E&gt;</span>
extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../org/jgrapht/alg/NaiveLcaFinder.html#NaiveLcaFinder(org.jgrapht.DirectedGraph)">NaiveLcaFinder</a></strong>(<a href="../../../org/jgrapht/DirectedGraph.html" title="interface in org.jgrapht">DirectedGraph</a>&lt;<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>,<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">E</a>&gt;&nbsp;graph)</code>
<div class="block">Find the Lowest Common Ancestor of a directed graph.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a></code></td>
<td class="colLast"><code><strong><a href="../../../org/jgrapht/alg/NaiveLcaFinder.html#findLca(V,%20V)">findLca</a></strong>(<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;a,
<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;b)</code>
<div class="block">Return the first found LCA of a and b</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../org/jgrapht/alg/NaiveLcaFinder.html#findLcas(V,%20V)">findLcas</a></strong>(<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;a,
<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;b)</code>
<div class="block">Return all the LCA of a and b.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="NaiveLcaFinder(org.jgrapht.DirectedGraph)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>NaiveLcaFinder</h4>
<pre>public&nbsp;NaiveLcaFinder(<a href="../../../org/jgrapht/DirectedGraph.html" title="interface in org.jgrapht">DirectedGraph</a>&lt;<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>,<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">E</a>&gt;&nbsp;graph)</pre>
<div class="block">Find the Lowest Common Ancestor of a directed graph.
<p>Find the LCA, defined as <i>Let G = (V, E) be a DAG, and let x, y ∈ V
. Let G x,y be the subgraph of G induced by the set of all common
ancestors of x and y. Define SLCA (x, y) to be the set of out-degree 0
nodes (leafs) in G x,y . The lowest common ancestors of x and y are the
elements of SLCA (x, y). This naive algorithm simply starts at a and b,
recursing upwards to the root(s) of the DAG. Wherever the recursion paths
cross we have found our LCA.</i> from
http://www.cs.sunysb.edu/~bender/pub/JALG05-daglca.pdf. The algorithm:
<pre>
1. Start at each of nodes you wish to find the lca for (a and b)
2. Create sets aSet containing a, and bSet containing b
3. If either set intersects with the union of the other sets previous values (i.e. the set of notes visited) then
that intersection is LCA. if there are multiple intersections then the earliest one added is the LCA.
4. Repeat from step 3, with aSet now the parents of everything in aSet, and bSet the parents of everything in bSet
5. If there are no more parents to descend to then there is no LCA
</pre>
The rationale for this working is that in each iteration of the loop we
are considering all the ancestors of a that have a path of length n back
to a, where n is the depth of the recursion. The same is true of b.
<p>We start by checking if a == b.<br>
if not we look to see if there is any intersection between parents(a) and
(parents(b) union b) (and the same with a and b swapped)<br>
if not we look to see if there is any intersection between
parents(parents(a)) and (parents(parents(b)) union parents(b) union b)
(and the same with a and b swapped)<br>
continues
<p>This means at the end of recursion n, we know if there is an LCA that
has a path of &lt;=n to a and b. Of course we may have to wait longer if
the path to a is of length n, but the path to b&gt;n. at the first loop
we have a path of 0 length from the nodes we are considering as LCA to
their respective children which we wish to find the LCA for.</div>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="findLca(java.lang.Object,java.lang.Object)">
<!-- -->
</a><a name="findLca(V, V)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findLca</h4>
<pre>public&nbsp;<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;findLca(<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;a,
<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;b)</pre>
<div class="block">Return the first found LCA of a and b</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - the first element to find LCA for</dd><dd><code>b</code> - the other element to find the LCA for</dd>
<dt><span class="strong">Returns:</span></dt><dd>the first found LCA of a and b, or null if there is no LCA.</dd></dl>
</li>
</ul>
<a name="findLcas(java.lang.Object,java.lang.Object)">
<!-- -->
</a><a name="findLcas(V, V)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>findLcas</h4>
<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&gt;&nbsp;findLcas(<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;a,
<a href="../../../org/jgrapht/alg/NaiveLcaFinder.html" title="type parameter in NaiveLcaFinder">V</a>&nbsp;b)</pre>
<div class="block">Return all the LCA of a and b. Currently not implemented</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - the first element to find LCA for</dd><dd><code>b</code> - the other element to find the LCA for</dd>
<dt><span class="strong">Returns:</span></dt><dd>the set of all LCA of a and b, or empty set if there is no LCA.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/NaiveLcaFinder.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../index-all.html">Index</a></li>
<li><a href="../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../org/jgrapht/alg/MinSourceSinkCut.html" title="class in org.jgrapht.alg"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../org/jgrapht/alg/NeighborIndex.html" title="class in org.jgrapht.alg"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?org/jgrapht/alg/NaiveLcaFinder.html" target="_top">Frames</a></li>
<li><a href="NaiveLcaFinder.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2016. All rights reserved.</small></p>
</body>
</html>