Skip to content

Commit 1b29429

Browse files
committed
refactored sequence distances
Moved utility classes used only by the sequence distances into the org.cicirello.sequences.distance package, and made them package-private.
1 parent d4d253a commit 1b29429

11 files changed

+37
-73
lines changed

src/org/cicirello/sequences/distance/AbstractSequenceDistanceMeasurer.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
*/
2121
package org.cicirello.sequences.distance;
2222

23-
import org.cicirello.sequences.Sequence;
24-
import org.cicirello.sequences.PrimitiveSequence;
23+
2524

2625
/**
2726
* <p>Extend this abstract class to define a distance metric for permutations where distance is an integer value. To extend this class,
@@ -38,7 +37,7 @@
3837
* @version 2.18.8.28
3938
* @since 1.1
4039
*/
41-
public abstract class AbstractSequenceDistanceMeasurer implements SequenceDistanceMeasurer, SequenceDistanceMeasurerDouble {
40+
abstract class AbstractSequenceDistanceMeasurer implements SequenceDistanceMeasurer, SequenceDistanceMeasurerDouble {
4241

4342
/**
4443
* {@inheritDoc}
@@ -186,10 +185,26 @@ public final int distance(String s1, String s2) {
186185
}
187186

188187
/**
189-
* {@inheritDoc}
188+
* Measures the distance between two Sequences.
189+
*
190+
* @param s1 First String.
191+
* @param s2 Second String.
192+
* @param <T> Type of element in sequence
193+
* @return distance between s1 and s2
190194
*/
191-
@Override
192-
public <T> double distancef(Sequence<T> s1, Sequence<T> s2) {
195+
<T> int distance(Sequence<T> s1, Sequence<T> s2) {
196+
return distance(s1,s2);
197+
}
198+
199+
/**
200+
* Measures the distance between two Sequences.
201+
*
202+
* @param s1 First String.
203+
* @param s2 Second String.
204+
* @param <T> Type of element in sequence
205+
* @return distance between s1 and s2
206+
*/
207+
<T> double distancef(Sequence<T> s1, Sequence<T> s2) {
193208
return distance(s1,s2);
194209
}
195210

src/org/cicirello/sequences/distance/EditDistance.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
package org.cicirello.sequences.distance;
2222

2323

24-
import org.cicirello.sequences.Sequence;
2524

2625
/**
2726
* <p>EditDistance is an implementation of Wagner and Fischer's dynamic programming algorithm for computing string edit distance.</p>
@@ -110,8 +109,8 @@ public EditDistance(int insertCost, int deleteCost, int changeCost) {
110109
* {@inheritDoc}
111110
* @throws UnsupportedOperationException if costs were initialized with double values.
112111
*/
113-
@Override
114-
public <T> int distance(Sequence<T> s1, Sequence<T> s2) {
112+
@Override
113+
<T> int distance(Sequence<T> s1, Sequence<T> s2) {
115114
if (insert_i < 0) throw new UnsupportedOperationException("EditDistance.distance not supported for floating-point costs.");
116115
int L1 = s1.length();
117116
int L2 = s2.length();
@@ -140,7 +139,7 @@ public <T> int distance(Sequence<T> s1, Sequence<T> s2) {
140139
* {@inheritDoc}
141140
*/
142141
@Override
143-
public <T> double distancef(Sequence<T> s1, Sequence<T> s2) {
142+
<T> double distancef(Sequence<T> s1, Sequence<T> s2) {
144143
int L1 = s1.length();
145144
int L2 = s2.length();
146145
double[][] D = new double[L1 + 1][L2 + 1];

src/org/cicirello/sequences/distance/ExactMatchDistance.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
*/
2121
package org.cicirello.sequences.distance;
2222

23-
import org.cicirello.sequences.Sequence;
2423

2524
/**
2625
* <p>ExactMatch distance (or Hamming Distance) of a pair of non-binary strings (or more generally sequences) is the number of
@@ -52,7 +51,7 @@ public final class ExactMatchDistance extends AbstractSequenceDistanceMeasurer {
5251
* {@inheritDoc}
5352
*/
5453
@Override
55-
public <T> int distance(Sequence<T> s1, Sequence<T> s2) {
54+
<T> int distance(Sequence<T> s1, Sequence<T> s2) {
5655
int n = s1.length();
5756
int m = s2.length();
5857
if (m < n) {

src/org/cicirello/sequences/distance/KendallTauDistance.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*/
2121
package org.cicirello.sequences.distance;
2222

23-
import org.cicirello.sequences.Sequence;
23+
2424
import java.util.Arrays;
2525

2626

@@ -93,7 +93,7 @@ public final class KendallTauDistance extends AbstractSequenceDistanceMeasurer {
9393
* @throws IllegalArgumentException if sequences are of different lengths, or contain different elements
9494
*/
9595
@Override
96-
public <T> int distance(Sequence<T> s1, Sequence<T> s2) {
96+
<T> int distance(Sequence<T> s1, Sequence<T> s2) {
9797
if (s1.length() != s2.length()) throw new IllegalArgumentException("Sequences must be same length for Kendall Tau distance.");
9898
if (s1.length() == 0) return 0;
9999

src/org/cicirello/sequences/ObjectSequence.java renamed to src/org/cicirello/sequences/distance/ObjectSequence.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
*/
2222

23-
package org.cicirello.sequences;
23+
package org.cicirello.sequences.distance;
2424

2525
import java.util.Arrays;
2626

@@ -35,7 +35,7 @@
3535
* @version 2.18.8.29
3636
* @since 1.1
3737
*/
38-
public final class ObjectSequence<E extends Comparable<E>> implements Sequence<E> {
38+
final class ObjectSequence<E extends Comparable<E>> implements Sequence<E> {
3939

4040
private final E[] a;
4141

src/org/cicirello/sequences/PrimitiveSequence.java renamed to src/org/cicirello/sequences/distance/PrimitiveSequence.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
*/
2222

23-
package org.cicirello.sequences;
23+
package org.cicirello.sequences.distance;
2424

2525
import java.util.Arrays;
2626

@@ -38,7 +38,7 @@
3838
* @version 2.18.8.29
3939
* @since 1.1
4040
*/
41-
public final class PrimitiveSequence implements Sequence<PrimitiveValue> {
41+
final class PrimitiveSequence implements Sequence<PrimitiveValue> {
4242

4343
private final AbstractPrimitiveSequence a;
4444

src/org/cicirello/sequences/PrimitiveValue.java renamed to src/org/cicirello/sequences/distance/PrimitiveValue.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
*/
2222

23-
package org.cicirello.sequences;
23+
package org.cicirello.sequences.distance;
2424

2525
/**
2626
* The PrimitiveValue class is a wrapper class for all eight of Java's primitive types.
@@ -39,7 +39,7 @@
3939
* @version 2.18.8.27
4040
* @since 1.1
4141
*/
42-
public final class PrimitiveValue {
42+
final class PrimitiveValue {
4343

4444
private final AbstractPrimitiveValue v;
4545

src/org/cicirello/sequences/Sequence.java renamed to src/org/cicirello/sequences/distance/Sequence.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*
2121
*/
2222

23-
package org.cicirello.sequences;
23+
package org.cicirello.sequences.distance;
2424

2525
/**
2626
* A Sequence is an ordered sequence of values, similar to an array or a list, except a Sequence has a more limited, and specific set of
@@ -34,7 +34,7 @@
3434
* @version 2.18.8.29
3535
* @since 1.1
3636
*/
37-
public interface Sequence<E> {
37+
interface Sequence<E> {
3838

3939
/**
4040
* Returns the length of the sequence.

src/org/cicirello/sequences/distance/SequenceDistanceMeasurer.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*/
2121
package org.cicirello.sequences.distance;
2222

23-
import org.cicirello.sequences.Sequence;
23+
2424

2525
/**
2626
* <p>Implement this interface, SequenceDistanceMeasurer, to define a distance metric for sequences. A sequence may have duplicate elements, unlike
@@ -111,15 +111,4 @@ public interface SequenceDistanceMeasurer {
111111
* @return distance between s1 and s2
112112
*/
113113
int distance(String s1, String s2);
114-
115-
/**
116-
* Measures the distance between two Sequences.
117-
*
118-
* @param s1 First String.
119-
* @param s2 Second String.
120-
* @param <T> Type of element in sequence
121-
* @return distance between s1 and s2
122-
*/
123-
<T> int distance(Sequence<T> s1, Sequence<T> s2);
124-
125114
}

src/org/cicirello/sequences/distance/SequenceDistanceMeasurerDouble.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
*/
2121
package org.cicirello.sequences.distance;
2222

23-
import org.cicirello.sequences.Sequence;
23+
2424

2525
/**
2626
* <p>Implement this interface, SequenceDistanceMeasurerDouble, to define a distance metric for sequences. A sequence may have duplicate elements, unlike
@@ -112,14 +112,4 @@ public interface SequenceDistanceMeasurerDouble {
112112
*/
113113
double distancef(String s1, String s2);
114114

115-
/**
116-
* Measures the distance between two Sequences.
117-
*
118-
* @param s1 First String.
119-
* @param s2 Second String.
120-
* @param <T> Type of element in sequence
121-
* @return distance between s1 and s2
122-
*/
123-
<T> double distancef(Sequence<T> s1, Sequence<T> s2);
124-
125115
}

0 commit comments

Comments
 (0)