Swift,计算排序算法的执行时间
我需要计算两种不同算法的执行时间,然后根据执行时间确定推荐算法。因此,我对算法和数据结构一般来说是相当陌生的,但在Swift中却很孤独 所以我做了一些搜索,没有找到多少。我确实找到了这个:Swift,计算排序算法的执行时间,swift,algorithm,performance-testing,Swift,Algorithm,Performance Testing,我需要计算两种不同算法的执行时间,然后根据执行时间确定推荐算法。因此,我对算法和数据结构一般来说是相当陌生的,但在Swift中却很孤独 所以我做了一些搜索,没有找到多少。我确实找到了这个: func printTimeElapsedWhenRunningCode(title:String, operation:()->()) { let startTime = CFAbsoluteTimeGetCurrent() operation() let timeElapse
func printTimeElapsedWhenRunningCode(title:String, operation:()->()) {
let startTime = CFAbsoluteTimeGetCurrent()
operation()
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
print("Time elapsed for \(title): \(timeElapsed) s.")
}
这就是我要测试的:
printTimeElapsedWhenRunningCode(title: "Merge Sort") {
let newSort = mergeSort(sortArray)
}
现在我不确定这是否真的在计算我需要什么。然后每次我运行这个,我总是得到一个不同的时间。我走的路对吗 注意:在现实生活中,最好找到一些已建立的性能测试框架。用正确的方法做测试是很困难的 以下是一份不完整的清单,列出了如果您自己进行测试,您最好做的事情:
如果您想对性能进行基准测试,那么使用单元测试“
measure{…}
块是一个很好的起点,因为它会运行几次并计算运行时间、标准偏差等
我还建议:
- 使用排序相对有效的类型(例如,
而不是[Int]
)对其进行测试,以便将重点放在排序速度而不是比较速度上)李>[String]
- 进行具有可观察时间的排序(例如,大型数组),并多次重复排序;及
- 对最终结果做一些简单的事情,这样如果您测试一个优化的构建,您就不会冒险让它优化出一些生成您不使用的结果的代码
class MyAppTests: XCTestCase {
let iterationCount = 1_000
// build large array
var array = (0 ..< 1_000).map { _ in Int.random(in: 0 ..< 1_000_000) }
// test performance
func testSortPerformance() {
measure {
for _ in 0 ..< iterationCount {
let results = array.sorted()
XCTAssert(!results.isEmpty)
}
}
}
func testBubbleSortPerformance() {
measure {
for _ in 0 ..< iterationCount {
let results = array.bubbleSorted()
XCTAssert(!results.isEmpty)
}
}
}
}
而且,当我在做这件事时,我可能也会测试排序算法本身,例如,确保结果是递增的,并且所有项目的总和仍然相加:
func testBubbleSort() {
let results = array.bubbleSorted()
var previous = results[0]
for index in 1 ..< results.count {
let current = results[index]
XCTAssertLessThanOrEqual(previous, current)
previous = current
}
XCTAssertEqual(results.sum(), array.sum())
}
func testBubbleSort(){
让结果=array.bubbleSorted()
var previous=结果[0]
对于1中的索引..
如何/在何处运行此代码?不要使用操场。用完全优化的发布版本测试代码。我一直在操场上做所有事情。我会用更多的信息更新我的帖子。永远不要尝试在操场上进行任何性能测试。这是为了作业。不是真实的世界。我们被告知找到排序算法并测试执行情况。基本上,分配是通过不同的排序算法进行的。我只需要一些方法来显示算法的执行时间。我继续,刚刚启动了一个swift控制台应用程序。我不需要使用操场,这是很好的信息。老实说,我觉得这是迄今为止最好的帮助,但我觉得最终我需要的是复杂的。我可能错了。这件事我还没开始,但我正计划着去做。我有一个9整数的数组。我只需要使用我选择的任何两种排序方法对它们进行排序。然后我需要知道计算每种排序的执行时间。然后根据时间对它们进行比较,并推荐最佳时间。我只需要知道我上面提交的代码是在简单的层次上还是在正确的方向上做了我需要的事情。您的方法是在正确的方向上,但是使用9个整数的数组测试一次迭代可能不会产生统计上显著的结果,这就是为什么我建议使用更大的数组和更多的迭代