使用图论算法的面向对象方法在 Java 中是否比一般基于数组的操作更快?
Is Object Oriented Approach with Graph Theory Algorithms faster in Java than general array based manipulations?
我总是习惯在解决图论问题时创建很多 类,例如:
class Node{
......
}
class Edge{
......
}
这常常让我陷入性能和速度问题。因此,我觉得使用数组存储图形比将其存储在用户定义 类 和列表和地图等结构中更快,尽管后者为代码提供了更大的灵活性和可读性。因此,使用数组和语言结构来表示图形确实会显着提高性能。如果是,在 Java?
中编码时应该选择哪个?
测量一下。
构建一个解决方案,将其放入分析器中,然后查看大部分计算时间用完的地方。你不能理智地争论这个话题,你需要实验。
也就是说:在 98% 的情况下,您最好编写可读的 OO 代码。如果结果证明它太慢,请缩小导致问题的方法(使用分析器)并尝试使该方法更快。不要开始编写丑陋的代码,希望它可能比好的代码更快。
数组的问题在于它们假设大图会浪费大量内存,而大图通常在节点之间实现很少的链接。
您获得的性能提升不仅取决于数据结构,还取决于图表的类型和您对其执行的操作。
例如删除节点在数组实现上可能非常昂贵。
是的,有时图形比数组快。基本上有时这取决于您的要求。有时,如果您使用数组是最佳选择,有时则使用图形。 java 中有许多可用的集合。像 linkedlist 、 arraylist 、 vector 、 doublelinkedlist 等。所有集合在 java 中都很快。您只需要选择符合您要求的最佳可能性...
我总是习惯在解决图论问题时创建很多 类,例如:
class Node{
......
}
class Edge{
......
}
这常常让我陷入性能和速度问题。因此,我觉得使用数组存储图形比将其存储在用户定义 类 和列表和地图等结构中更快,尽管后者为代码提供了更大的灵活性和可读性。因此,使用数组和语言结构来表示图形确实会显着提高性能。如果是,在 Java?
中编码时应该选择哪个?测量一下。
构建一个解决方案,将其放入分析器中,然后查看大部分计算时间用完的地方。你不能理智地争论这个话题,你需要实验。
也就是说:在 98% 的情况下,您最好编写可读的 OO 代码。如果结果证明它太慢,请缩小导致问题的方法(使用分析器)并尝试使该方法更快。不要开始编写丑陋的代码,希望它可能比好的代码更快。
数组的问题在于它们假设大图会浪费大量内存,而大图通常在节点之间实现很少的链接。
您获得的性能提升不仅取决于数据结构,还取决于图表的类型和您对其执行的操作。
例如删除节点在数组实现上可能非常昂贵。
是的,有时图形比数组快。基本上有时这取决于您的要求。有时,如果您使用数组是最佳选择,有时则使用图形。 java 中有许多可用的集合。像 linkedlist 、 arraylist 、 vector 、 doublelinkedlist 等。所有集合在 java 中都很快。您只需要选择符合您要求的最佳可能性...