我看过类似的问题,详细介绍了 Map 的排序和原始数据类型数组的排序,但没有问题直接详细说明 Java Map 的一次性排序与原始数据类型数组 ([]) 之间的区别。
Primary note*
我知道“TreeMap”是 Java 中 Map 的排序版本(按键),但我不知道 TreeMap 如何对键进行排序的“幕后”有多少(在添加数据时,或在添加数据完成后)?
Primary note 2*
Dijkstra 的算法in this case
不是一个精确的实现。我们只是在大小为 M 个节点的图 G 中找到加权边的最短路径。这意味着邻接矩阵(格式见下文)的大小为 M x M。这是not
一个 SMART 实现。几乎就像你能得到的基线一样……抱歉造成混乱!
我们得到了一个邻接矩阵,在以下示例中,元素彼此相关(“连接”):
0,1,5 // 0 is connected to 1, and the weight of the edge is 5
0,2,7 // 0 is connected to 2, and the weight of the edge is 7
0,3,8 // 0 is connected to 3, and the weight of the edge is 8
1,2,10 // 1 is connected to 2, and the weight of the edge is 10
1,3,7 // 1 is connected to 3, and the weight of the edge is 7
2,3,3 // 2 is connected to 3, and the weight of the edge is 3
但不要介意输入,只要假设我们有一个值矩阵来操作。
我们正在考虑将所有可能的路径存储在“最短路径”算法中(我相信 SO 上 75% 或更多的人都知道 Dijkstra 的算法)。这是家庭作业,而是一个实施问题,而不是“为我解决这个问题”。
ASSUME
矩阵的大小为very large
(大小 M x M),可能大于50x50
大小。这将导致[50-1]!/2 = 1.52 × 10^64
结果列表中的结果假设我们的算法足够聪明,可以挑选出重复项并且找不到重复路径的长度(事实并非如此,因为我们是图论和 Java 的菜鸟,所以请不要建议任何算法以避免重复...)。
我的朋友说,对 List 中 int[n] 的索引进行临时排序(使用临时变量),其中 int[n] 是last index
并且value of the shortest path
(ALGORITHM_1)可能比key
Map 是的TreeMap(ALGORITHM_2)更快value of the shortest path
. _
我们正在讨论在尝试找到所有lengths
最短路径时哪种实现会更快。我们可以将它存储为每个路径的最后一个索引(有一个 int[],其中最后一个元素是最短路径的值(总和)(数组中的所有元素)(ALGORITHM_1),或者我们可以将该总和存储为地图的 KEY (ALGORITHM_2)。
因为这是一个shortest path algorithm
(虽然不是很好......),我们需要按长度(即图中每条边的总和)对每条路径的结果进行排序,以便找到最短路径。
所以真正的问题是:对结果进行排序会更快ONLY ONE TIME
吗?通过 Map.sort() 算法(内置在 Java 标准库中)或通过创建一个临时变量来保存每个 int[] 中最新“长度”的值?例如:
myMap.sort(); // Unless TreeMap in Java does 'behind=the-scenes' sorting on keys...
myMap.get(0); // This would return the first element of the map, which is the shortest path
或者
int temp = myList.get(0)[m]; // Store a temp variable that is the 'shortest path'
for( int[] i in myList<int[]>) {
if (temp > myList.get(i)[m]) { // Check if the current path is shorter than the previous
temp = myList.get(i)[m]; // Replace temp if current path is shorter
}
}
Note
我还没有真正测试过实现,也没有检查过我自己的 Java 语法,所以我不知道这些语句是否正确声明。这只是一个理论问题。哪个跑得更快?这是我学习 Java 的第三年,我不知道 HashMap 中使用的底层数据结构,也不知道这两种实现的大 O 表示法。
也许了解 Java 标准的人可以描述在 HashMap 与(原始数据类型)[] 中使用了哪种数据结构或实现,以及在ONE-TIME-ONLY
某种结构中运行时间的差异可能是什么。
我希望这个调查是有意义的,我感谢任何花时间回答我问题的人;我一直很感激像你们这样慷慨的人为帮助教育新手所付出的时间和精力!
问候,克里斯