Я работаю над проектом Java о редактировании расстояния, то есть минимальном количестве операций (из трех определенных операций см. здесь для получения дополнительной информации!). Я совершенно новичок в Java, и он кажется великолепным объектно-ориентированным языком, но, возможно, менее численно ориентированным, как, например, Matlab. Проблема в том, что я не знаю, какие все соответствующие функции в Matlab или Python находятся в Java, которые бы реализовали мое решение для этого проекта, поэтому все, что мне нужно, это небольшая конструктивная помощь по этому вопросу.
Код ниже (не волнуйтесь, я не ожидаю, что кто-нибудь поймет код / алгоритм, но он работает!)
КОД
import java.util.LinkedList;
import java.util.List;
public class ClosestWords {
LinkedList<String> closestWords = null;
int closestDistance = -1;
int[][] partDist(String w1, String w2, int w1len, int w2len) {
int[][] M = new int[w1len+1][w2len+1];
for(int i=0;i<=w1len;i++) {
for(int j=0;j<=w2len;j++) {
if( i == 0) {
M[i][j] = j;
}
else if(j==0) {
M[i][j] = i;
}
else {
char a = w1.charAt(i-1);
char b = w2.charAt(j-1);
int I = (a == b ? 0:1);
M[i][j] = Math.min(Math.min(M[i-1][j]+1,M[i][j-1]+1),M[i-1][j-1]+I);
}
}
}
return M;
}
int[][] Distance(String w1, String w2) {
return partDist(w1, w2, w1.length(), w2.length());
}
public ClosestWords(String w, List<String> wordList) {
for (String s : wordList) {
int[][] M = Distance(w, s);
int dist = M[w.length()-1][s.length()-1];
// int dist = Distance(w, s);
// System.out.println("d(" + w + "," + s + ")=" + dist);
if (dist < closestDistance || closestDistance == -1) {
closestDistance = dist;
closestWords = new LinkedList<String>();
closestWords.add(s);
}
else if (dist == closestDistance)
closestWords.add(s);
}
}
int getMinDistance() {
return closestDistance;
}
List<String> getClosestWords() {
return closestWords;
}
}
Теперь, что я хотел бы сделать (но я не знаю, как это сделать), это обновить матрицу M
внутри for
l oop в ClosestWords
. В Matlab это было бы легко: я просто установил бы матрицу в некоторый начальный вид, тогда для каждого l oop мы получили бы новую матрицу из вызова функции Distance(w, s)
. Эту новую матрицу я, в свою очередь, хотел бы изменить, то есть удалить из нее номер последней строки. Как мне это сделать? Например, у меня матрица M
, которая равна 4 на 4, затем я удаляю последнюю строку, чтобы получить M_new
, то есть 3 на 4. Возможно ли это?
Кроме того, если мне нужно строки различной длины, как я могу проверить (самым простым способом), сколько их первых букв одинаковы? То есть максимальная длина подстрок строк, начинающихся слева и равных друг другу? Например, compute
и commute
будут иметь три общие первые буквы (начиная слева), поэтому три первые буквы будут одинаковыми.
С уважением,