二分法dijkstra算法案例python
时间: 2023-09-09 12:01:06 浏览: 164
二分法Dijkstra算法是一种用于求解单源最短路径问题的经典算法。它的基本思想是通过逐步扩展已找到的最短路径来找到起点到其他所有节点的最短路径。
以下是一个使用Python实现二分法Dijkstra算法的简单案例:
首先,我们需要定义一个图的类来表示给定的图。该类包含一个节点的字典,每个节点包括与其他节点的连接以及对应的距离。
接下来,我们定义一个函数dijkstra来实现二分法Dijkstra算法。该函数的输入参数包括图、起点和终点。
在函数中,我们创建两个空集合,一个用于存放已找到最短路径的节点,另一个用于存放还未找到最短路径的节点。我们还创建一个字典用来存放每个节点的最短路径。
然后,我们将起点加入到还未找到最短路径的节点集合中,并设置起点到自己的最短路径为0。接着,我们进入一个while循环,直到还未找到最短路径的节点集合为空。
在循环中,我们遍历还未找到最短路径的节点集合,找到具有最小最短路径值的节点,并将其从集合中删除,并将其加入到已找到最短路径的节点集合中。
然后,我们遍历该节点的所有连接节点。对于每个连接节点,我们计算通过当前节点到达该节点的路径值。如果该节点的路径值小于其最短路径值,我们更新该节点的最短路径值,并将其加入到还未找到最短路径的节点集合中。
最后,我们从终点开始回溯,找到最短路径。我们将最短路径按照节点的顺序存入一个列表,并返回该列表作为函数的输出结果。
通过以上方式,我们可以实现一个简单的二分法Dijkstra算法。在该案例中,我们使用Python语言实现了该算法来解决单源最短路径问题。
相关问题
python 二分法查找算法
二分法查找算法也被称为折半查找算法,它是一种高效的查找算法。它的基本思想是:将有序数组分成两部分,取数组中间的元素与目标值进行比较,如果中间元素等于目标值,则直接返回;如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复上述过程,直到数组中不存在目标值,或者查找范围为空。
以下是 Python 实现二分法查找算法的代码:
```python
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
```
其中,`arr` 为有序数组,`target` 为目标值。函数返回目标值在数组中的下标,如果不存在则返回 -1。
使用示例:
```python
arr = [1, 3, 5, 7, 9]
target = 5
print(binary_search(arr, target)) # 输出:2
```
时间复杂度为 O(logn),比线性查找算法要快得多。
二分法求平方根Apython
以下是使用二分法求平方根的Python实现:
```python
def sqrt_binary_search(n):
if n < 1:
return None
if n == 1:
return 1
low, high = 1, n
while low <= high:
mid = (low + high) // 2
if mid * mid == n:
return mid
elif mid * mid < n:
low = mid + 1
else:
high = mid - 1
return high
```
该函数使用二分法来逼近平方根,首先判断输入是否合法,然后初始化左右边界,不断缩小范围,直到找到平方根或者左右边界重合。如果找到平方根,则返回该值,否则返回左边界。
阅读全文