由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 最短路的算法复杂度问题
相关主题
这个图问题的复杂度是多少呢请教一个算法问题 (转载)
问问Boost library, 尤其是Boost Graph Library (BGL)满血复活
我该怎么靠这个玩意发财?一个地图类的应用如何计算1000的阶乘
请问一个算法这个怎么排序来着
Dijkstra算法怎么产生全排列?
请教:Map reduce到底是什么啊 (转载)递归程序
请问一个查找算法。Haskell的学习曲线是指数增长的!
请问各位工作的人,算法复杂度分析在工作中用的着吗?怎么提高C++计算精度? C++ vs Matlab (转载)
相关话题的讨论汇总
话题: 算法话题: 元素话题: n2话题: 复杂度话题: 最小
进入Programming版参与讨论
1 (共1页)
m**********e
发帖数: 220
1
Dijkstra 算法最簡單的實現方法是用一個鏈表或者數組來存儲所有頂點的集合 Q,所
以搜索 Q 中最小元素的咚悖‥xtract-Min(Q))只需要線性搜索 Q 中的所有元素。這
樣的話算法的咝袝r間是 O(n2)。
这是维基百科上看到的
我想问一下就是为什么算法复杂度是O(n2呢, 每次搜到最小元素以后就删除,放到另
一个链表里,这样下一次不就是n减一了吗? 应该是o(n!)啊
不是吗
谢谢
z*******3
发帖数: 13709
2
………………………………
跪了
m**********e
发帖数: 220
3
为什么?

【在 z*******3 的大作中提到】
: ………………………………
: 跪了

d**o
发帖数: 864
4
最差情况遍历所有点,每一次又遍历Q中元素查找最小,所以是O(n^2)
不明白O(n!)什么意思,你想说的是O(n(n-1))吗?这就是O(n^2)

【在 m**********e 的大作中提到】
: Dijkstra 算法最簡單的實現方法是用一個鏈表或者數組來存儲所有頂點的集合 Q,所
: 以搜索 Q 中最小元素的咚悖‥xtract-Min(Q))只需要線性搜索 Q 中的所有元素。這
: 樣的話算法的咝袝r間是 O(n2)。
: 这是维基百科上看到的
: 我想问一下就是为什么算法复杂度是O(n2呢, 每次搜到最小元素以后就删除,放到另
: 一个链表里,这样下一次不就是n减一了吗? 应该是o(n!)啊
: 不是吗
: 谢谢

c*********e
发帖数: 16335
5
en,每种算法其实都有best case,worst case.所以,每种算法其实有好几个big o
notation值。

【在 d**o 的大作中提到】
: 最差情况遍历所有点,每一次又遍历Q中元素查找最小,所以是O(n^2)
: 不明白O(n!)什么意思,你想说的是O(n(n-1))吗?这就是O(n^2)

m**********e
发帖数: 220
6
我想说的是n的阶乘啊
因为每次都把最小的元素删除了,这样总元素的个数就是n-1了
难道不对吗

【在 d**o 的大作中提到】
: 最差情况遍历所有点,每一次又遍历Q中元素查找最小,所以是O(n^2)
: 不明白O(n!)什么意思,你想说的是O(n(n-1))吗?这就是O(n^2)

t****t
发帖数: 6806
7
i guess you didn't even get the algorithm right...

【在 m**********e 的大作中提到】
: 我想说的是n的阶乘啊
: 因为每次都把最小的元素删除了,这样总元素的个数就是n-1了
: 难道不对吗

d**o
发帖数: 864
8
你想说的是和不是乘吧?
即使是这样,复杂度的O表示法还是O(n^2)

【在 m**********e 的大作中提到】
: 我想说的是n的阶乘啊
: 因为每次都把最小的元素删除了,这样总元素的个数就是n-1了
: 难道不对吗

c*********e
发帖数: 16335
9
Dijkstra 算法的時間複雜度是 (n-1) + (n-2) +(n-3)...+1,時間複雜度是o(n2).

【在 m**********e 的大作中提到】
: Dijkstra 算法最簡單的實現方法是用一個鏈表或者數組來存儲所有頂點的集合 Q,所
: 以搜索 Q 中最小元素的咚悖‥xtract-Min(Q))只需要線性搜索 Q 中的所有元素。這
: 樣的話算法的咝袝r間是 O(n2)。
: 这是维基百科上看到的
: 我想问一下就是为什么算法复杂度是O(n2呢, 每次搜到最小元素以后就删除,放到另
: 一个链表里,这样下一次不就是n减一了吗? 应该是o(n!)啊
: 不是吗
: 谢谢

m**********e
发帖数: 220
10
嗯。。写错了
是和
我懂了
谢谢大家
还想问一下就是我的图是用邻接表存储的,但算法就是用普通方法实现的
看到网上说有办法可以改进算法,對於邊數少於 n2 的稀疏圖來說,我們可以用鄰接表
來更有效的實現该算法。同時需要將一個二叉堆或者斐波納契堆用作優先隊列來尋找最
小的頂點(Extract-Min)。當用到二叉堆的時候,算法所需的時間為O((m + n)log n)
,斐波納契堆能稍微提高一些性能,讓算法咝袝r間達到O(m + n log n)。
不是很懂怎样用二叉堆来做这个算法

【在 d**o 的大作中提到】
: 你想说的是和不是乘吧?
: 即使是这样,复杂度的O表示法还是O(n^2)

1 (共1页)
进入Programming版参与讨论
相关主题
怎么提高C++计算精度? C++ vs Matlab (转载)Dijkstra算法
Any difference between class and typename identifier?请教:Map reduce到底是什么啊 (转载)
问一个 关于地图 (GIS) 的 编程问题请问一个查找算法。
shortest path algorithm(dijkstra)的变形请问各位工作的人,算法复杂度分析在工作中用的着吗?
这个图问题的复杂度是多少呢请教一个算法问题 (转载)
问问Boost library, 尤其是Boost Graph Library (BGL)满血复活
我该怎么靠这个玩意发财?一个地图类的应用如何计算1000的阶乘
请问一个算法这个怎么排序来着
相关话题的讨论汇总
话题: 算法话题: 元素话题: n2话题: 复杂度话题: 最小