Я никогда не видел учебника, использующего классы HashMap для классов Node или Graph.Использование HashMap для структур данных Node & Graph
Вот моя реализация классов узлов и графов. У них есть O (1) сложность времени для всех основных операций, таких как проверка узла, проверка соседа, получение расстояния между двумя узлами и т. Д.?
//T as the type of the content in each node
//D as the type of the distance between the nodes
class Node<T,D>{
private T content;
private HashMap<T,D> neighbors;
private boolean marked;
//an example method
protected boolean hasNeighbor(T t){
return this.neighbors.containsKey(t);
}
//another example method
protected D distanceTo(T t){
return this.neighbors.get(t);
}
//this class also overrides equals() and hashCode() methods so that every two nodes
//equal to each other if and only if their content equal to each other
}
также, вот моя идея о классе графов
public class Graph<T,D>{
private HashMap<T, Node<T,D>> nodes;
//an example method
public D distanceBetween(T a, T b){
return this.nodes.get(a).distanceTo(b);
}
}
Так что, все может быть сделано в постоянная время, не так ли? Если да, почему мы не можем увидеть какой-либо учебник, использующий такую реализацию?
'distanceBetween' не является' O (1) 'в вашей реализации. Если вы используете матрицу смежности, 'isNeighbor' можно сделать в' O (1) '. Расстояние AFAIK между двумя узлами не может быть выполнено за постоянное время для общих графиков. – Bill
@Bill почему 'distanceBetween()' не 'O (1)'? Оба 'get (...)' в хэш-картах являются постоянным временем, не так ли? –