假设我有一个4乘4的网格,所以有16个单元格。每个单元格包含一个介于1,5之间的值。如。
0 1 2 3
_ _ _ _
0 - |2|1|3|2|
1 - |1|3|5|1|
2 - |5|2|1|4|
3 - |2|4|2|1|
现在我知道我需要使用Dijkstra算法。为了优化这一点,我需要使用优先级队列。
我的目标是找到到达目的地的每个单元格的最短总和。源在网格上可以是随机的,目标也可以是随机的。(即并非总是从左上到右下)。
我曾经研究过使用邻接矩阵的图。但是,使用此网格创建相邻矩阵是否明智?i、 e.将所有非相邻字段设置为无穷大。将单元格插入优先级队列的最充分方式是什么?是{(行,列),距离}吗?
我的理解是,优先级队列将存储最佳路径?所以细胞和累积距离。因为,Dijstra的算法使用BFS,在这种情况下,BFS将搜索所有邻居的最短距离。
使'Node'类具有3个字段(行,列,距离)并实现可比。然后使用使用PriorityQueue
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Node> pq = new PriorityQueue<>();
pq.add(new Node(2, 3, 12));
pq.add(new Node(0, 9, 1));
pq.add(new Node(4, 0, 8));
System.out.println(pq.poll().getDistance()); //prints 1
}
}
class Node implements Comparable<Node>{
private final int row, col, distance;
public Node(int row, int col, int value) {
this.row = row;
this.col = col;
distance = value;
}
int getDistance() {
return distance;
}
@Override
public int compareTo(Node other) {
return Integer.compare(distance, other.distance);
}
}
或者,将一个
Comperator
设置到优先级队列,这样节点
就不必实现compariable
:
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Node> pq = new PriorityQueue<>(Node::compare);
pq.add(new Node(2, 3, 12));
pq.add(new Node(0, 9, 1));
pq.add(new Node(4, 0, 8));
System.out.println(pq.poll().getDistance()); //prints 1
}
}
class Node{
private final int row, col, distance;
public Node(int row, int col, int value) {
this.row = row;
this.col = col;
distance = value;
}
int getDistance() {
return distance;
}
public static int compare(Node o1, Node o2) {
return Integer.compare(o1.getDistance(), o2.getDistance());
}
}
您还可以使用lambda表达式设置comperator:
PriorityQueue
这三个选项都有效。
我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。
我试图实现Dijkstra算法的一个版本,以找到公共汽车从起点到终点的最短路线。不幸的是,我似乎找不到swift提供优先级队列类型的库或其他方式,所以我似乎必须自己编写代码。 话虽如此,有人能指出我做这件事的正确方向吗? 目前我的想法如下: 到目前为止这是我的代码。似乎太短太残忍了...我一定是在概念上漏掉了什么。
我正在尝试在滑动窗口中打印最大值。将窗口大小的元素,这里k=3放入优先级队列(Maxheap),然后查看值。”heap.Init(
我的代码有一个特殊的问题。 然后它会发生在图像上出现的事情。我需要汉字列是CENTER对齐,但出于某种原因,'tcr,不工作,因为它应该是,但默认渲染器正在做它应该是。 有什么建议/帮助吗?
问题内容: 在Python文档中, 最低值的条目首先被检索(最低值的条目是由返回的条目)。条目的典型模式是形式为的元组。 看来队列将按优先级排序,然后按数据排序,这可能并不总是正确的。假设数据“项目2”在“项目1”之前入队,则项目1仍将排在第一位。在另一个文档页面heapq中,它建议使用计数器。所以我将数据存储为。是否没有类似的东西 那我就不需要自己执行订购吗? 问题答案: 据我所知,您要找的东西
问题内容: 我有一个要存储’raw’的数据框: 但似乎试图“解压” numpy.array。 有解决方法吗?除了使用包装器之外(请参见下面的编辑)? 我尝试没有成功。 编辑 这行得通,但是我必须使用’dummy’类来包装数组,这不能令人满意,也不是很优雅。 问题答案: 在numpy数组周围使用包装器,即将numpy数组作为列表传递 输出: 或者您可以通过创建元组来使用,即如果您有一个数据框 输出: