如果我有一个两个并行的算法,我想分析算法的范围,我该怎么办?
例如
parallel for a=2 to n
parallel for b=1 to a-1
我猜是跨度是theta(lg(n)* lg(n)),但我不确定。 :)有人可以提供帮助或提示吗?
答案 0 :(得分:0)
我假设你想要这个算法的time complexity。由于时间复杂度不是算法实际花费了多少时间,而是需要多少操作([支持此声明的引用]],此算法的时间复杂度为O(n^2)
,如果它是不平行。
:Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform
为什么我们不关心算法并行?
通常,我们的簇大小是固定的,并且不依赖于输入[n]。让群集大小为k
[意思是,我们可以同时执行k
个操作,算法为O(n^2)
[为简单起见假设n^2
]
假设我们有一个100的输入,那么它将“花费”(100^2)/k
时间。如果大小为1,000,则需要(1000^2)/k
,对于n个元素:(n^2)/k
,如您所见,k是常量,并且程序是并行的这一事实不会改变复杂。能够一次进行k
次操作,并不是更好[甚至值得,但那是另一个线程]然后计算机k
时间更快。