- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
for (i = 1 to n)
for (j = 1 to n)
for (k = j+1 to n)
if (A(i, j) = A(i, k)) return false;
for (k = 1 to n)
for (i = 1 to n)
for (j = i+1 to n)
if (A(i, k) = A(j, k)) return false;
返回真;这里的伪代码是一种验证 n x n 矩阵是否为拉丁方的算法,但我的作业需要设计一个运行时间为 O(n^2) 的更快算法。所以,我在想,如果我简单地删除那两个第三个内部循环并更改为 if 语句,例如,
for (i = 1 to n)
for (j = 1 to n)
if (k <= n)
k = j + 1;
if (A(i, j) = A(i, k)) return false;
for (k = 1 to n)
for (i = 1 to n)
if (j <= n)
j = i + 1;
if (A(i, k) = A(j, k)) return false;
我已经在这个问题上卡了 2 个小时了,仍然一无所获。这个想法实际上来 self 的一个 friend 。只是为了验证我是否可以这样做,在删除第三个内部循环并添加if语句后,这个算法的运行时间是否变得更快?任何回应都会有所帮助,谢谢。
最佳答案
您的第二个代码块将无法正确进行验证:
if (A(i, j) = A(i, k))
归结为 if (A(i, j) = A(i, j+1))
,这不足以作为测试:当它们不相邻时,这将不会检测到重复项。一种具有O(n²) 时间复杂度的方法是使用 hash sets .许多编程语言都提供这种数据结构,允许插入和成员资格测试操作以 O(1) 时间复杂度(摊销)执行。
使用集合,您可以在 O(n) 中验证一行(或列)是否具有 n 个不同的值。为确保 n 个不同的值总体,您还可以使用集合。
下面是伪代码:
if A is not square:
return false
allValues = set()
for (i = 1 to n)
rowValues = set()
colValues = set()
for (j = 1 to n)
rowValues.add( A(i, j) )
colValues.add( A(j, i) )
allValues.add( A(i, j) )
if (colValues.size != n) return false
if (rowValues.size != n) return false
if (allValues.size != n) return false
return true
如果矩阵 A 中的值应该在 1..n 范围内,那么您也可以使用数组而不是集合。然后伪代码是这样的:
if A is not square:
return false
for (i = 1 to n)
rowValues = Array(size = n).fillWith(0)
colValues = Array(size = n).fillWith(0)
for (j = 1 to n)
if (A(i, j) < 1 or A(i, j) > n) return false
if (rowValues( A(i, j) ) != 0) return false
rowValues( A(i, j) ) = 1
if (rowValues( A(j, i) ) != 0) return false
colValues( A(j, i) ) = 1
return true
关于algorithm - 我可以使用 if 语句而不是三重嵌套 for 循环来使我的算法更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58075122/
我想在每次处理 for 循环时将一个值加倍。到目前为止,我有以下代码: constexpr size_t doubleN(size_t n, size_t iteration) {
我对 Cabal 的运作方式感到困惑。我习惯了包管理器,作为其核心功能的一部分,能够轻松更新所有已更改的包,或者至少获取系统上有可用更新的包列表。但Cabal似乎缺乏这个功能。我错过了什么吗? 有没有
Oracle文档中有一句话: The elements are ordered using their natural ordering, or by a Comparator provided at
我在 XCode 6.1.1 中使用 Storyboard,我的一些 segues 在其他 View 后面穿过 Storyboard,使 Storyboard 看起来非常草率。我想知道是否有一种方法可
我想要一个 重叠在图像上,因此当用户点击它时,文件上传对话框打开,图像通过 AJAX 上传。 所以我希望 CSS 以这样一种方式设置字段样式,即只有浏览按钮可见(没有关联的框),或者更好的是,只有透明
我想对我正在调用的函数设置时间限制,这样如果它超时,它就会移动到脚本的下一部分(我正在运行 source("..."))。该函数是使用 Rcpp 编写的,具有 checkUserInterrupt()
这个问题在这里已经有了答案: Autofill OTP to the TextField when I receive message iPhone app (2 个答案) 关闭 4 年前。 每当我
创建一个包含您的 Entity Framework 模型和对象上下文的类库。然后向解决方案添加一个新的控制台应用程序。在控制台应用程序中,引用具有您的模型的项目。 现在在控制台应用程序中输入: sta
这个问题已经有答案了: What do querySelectorAll and getElementsBy* methods return? (12 个回答) 已关闭 5 年前。 我指的是使用 ja
我了解到我们可以从 url_launcher 启动谷歌地图、电子邮件和 Skype。在手机内置相机应用程序中打开的 URL 应该是什么? Android 和 iOS 都可以吗? const url =
我试图通过使用以下方式向我的单元测试项目公开一些内部结构: [assembly: InternalsVisibleTo("MyTest")] 但是我得到了错误: Error 1 Friend asse
我希望能够像真正的unix工具一样调用java程序,例如与 user/home> myapp [args] 而不是 user/home> java -jar path/to/myapp.jar [ar
我想直接调用jquery.animate来改变div的效果,但发现没有任何效果。 相反,我需要将其放入 setTimeout(..., 0) 中才能使其正常工作。 我想知道为什么我需要这样做,这是最好
FIXED MySQL 表相对于 DYNAMIC 表具有众所周知的性能优势。 有一个表tags,只有一个description文本字段。一个想法是将此字段拆分为 4-8 个 CHAR(255) 字段。
您会推荐 Iron Ruby、Iron Python 或 PowerShell 来使 C# 应用程序成为脚本宿主吗? 经过一些快速的修改,现在我倾向于 powershell 主要有两个原因(请注意,这
我是一名优秀的程序员,十分优秀!