- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个对称矩阵,如下图所示。
我编写了符号A.B,它表示网格点(A, B)处的值。此外,编写A.B.C 给出像这样的最小网格点值:MIN((A,B), (A,C), (B,C)).
另一个例子 A.B.D 给了我 MIN((A,B), (A,D), (B,D)).
我的目标是一次为一行找到所有字母组合(不重复)的最小值,例如对于这个例子,我需要找到关于 A 行的最小值,这些值由计算给出:
A.B = 6
A.C = 8
A.D = 4
A.B.C = MIN(6,8,6) = 6
A.B.D = MIN(6, 4, 4) = 4
A.C.D = MIN(8, 4, 2) = 2
A.B.C.D = 最小值(6, 8, 4, 6, 4, 2) = 2
我意识到某些计算可以重用,这随着矩阵大小的增加而变得越来越重要,但问题是找到实现这种重用的最有效方法。
能否为我指明正确的方向,以找到可用于此问题的高效算法/数据结构?
最佳答案
您需要考虑 lattice of subsets of the letters, ordered by inclusion .本质上,对于大小为 2 的每个子集 S(即,矩阵的每个非对角线元素 - 对角线元素似乎不会出现在您的问题中),您都有一个值 f(S) ,问题是对于每个大小大于 2 的子集 T,找到 T 中包含的所有大小为 2 的 S 的最小 f(S)。(然后您只对包含特定元素“A”的集合 T 感兴趣 - 但我们暂时忽略它。)
首先,请注意,如果您有 n 个字母,这相当于询问 Omega (2^n) 个问题,每个子集大约一个。 (排除零元素和一元素子集以及那些不包含“A”的子集分别为您保存 n + 1 个集合和一个因子二,这对于 big Omega 是允许的。)因此,如果您想存储所有这些答案即使是中等大的 n,您也需要大量内存。如果您的应用程序中的 n 很大,那么最好存储一些预先计算的数据集合,并在需要特定数据点时进行一些计算;我还没有想过什么是最好的,但是例如只计算格中包含的二叉树的数据除了什么都不预先计算之外不一定对你有任何帮助。
考虑到这些问题,让我们假设您实际上想要计算所有答案并将其存储在内存中。您需要“逐层”计算这些,即从三元素子集开始(因为矩阵已经给出了二元素子集),然后是四元素子集,然后是五元素子集,依此类推。这样,对于给定的子集 S,当我们计算 f(S) 时,我们已经计算了严格包含在 S 中的 T 的所有 f(T)。有几种方法可以利用它,但我认为最简单的可能是使用两个这样的子集 S:让 t1 和 t2 是 T 的两个不同元素,您可以随意选择;设 S 为删除 t1 和 t2 时得到的 T 的子集。 S加t1记为S1,S加t2记为S2。现在 T 中包含的每一对字母要么完全包含在 S1 中,要么完全包含在 S2 中,或者是 {t1, t2}。在您之前计算的值中查找 f(S1) 和 f(S2),然后直接在矩阵中查找 f({t1, t2}),并存储 f(T) = 这 3 个数字中的最小值。
如果您从不为 t1 或 t2 选择“A”,那么您确实可以计算您感兴趣的所有内容,而无需为任何不包含“A”的集合 T 计算 f。 (这是可能的,因为只有当 T 至少包含三个元素时,上面概述的步骤才有意义。)好!这只剩下一个问题——如何存储计算值 f(T)。我要做的是使用 2^(n-1) 大小的数组;用 (n-1) 位数表示包含“A”的每个字母表子集,其中第 i+1 个字母在该集合中时第 i 位为 1(因此 0010110,设置了第 2、4 和 5 位,表示字母表“A”..“H”中的子集{“A”、“C”、“D”、“F”} - 注意我正在计算开始的位从右边 0 开始,字母从“A”开始 = 0)。这样,您实际上可以按数字顺序遍历集合,而无需考虑如何遍历 n 元素集的所有 k 元素子集。 (你确实需要包括一个特殊情况,当所考虑的集合有 0 或 1 个元素时,在这种情况下你什么都不做,或者有 2 个元素,在这种情况下你只需从矩阵中复制值。)
关于用于轻松查找最小值组合的算法/数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227329/
我在为 MacOSX 构建的独立包中添加 DMG 背景的自定义图标时遇到问题。我在项目的根目录中添加了一个包。正在从中加载自定义图标,但没有加载 DMG 背景图标。我正在使用 Java fx 2.2.
Qt for Symbian 和 Qt for MeeGo 有什么区别?我知道 Qt 是一个交叉编译平台。这是否意味着如果我使用来自 Qt 的库,完全相同的库可以在所有支持 Qt 的设备(例如 Sym
我正在尝试使用 C# .NET 3.5/4.0 务实地运行 SQL Server 数据库的备份。我已经找到了如何完成此操作,但是我似乎找不到用于备份的命名空间库。 我正在寻找 Microsoft.Sq
我最近在疯狂学习 Java,但我通常是一名 .NET 开发人员。 (所以请原谅我的新手问题。) 在 .Net 中,我可以在不使用 IIS 的情况下开发 ASP.Net 页面,因为它有一个简化的 Web
这post仅当打印命令中有字符串时才有用。现在我有大量的源代码,其中包含一条声明,例如 print milk,butter 应该格式化为 print(milk,butter) 用\n 捕获行尾并不成功
所以我的问题是: https://gist.github.com/panSarin/4a221a0923927115584a 当我保存这个表格时,我收到了标题中的错误 NoMethodError (u
如何让 Html5 音频在点击时播放声音? (ogg 用于 Firefox 等浏览器,mp3 用于 chrome 等浏览器) 到目前为止,我可以通过 onclick 更改为单个文件类型,但我无法像在普
如果it1和it2有什么区别? std::set s; auto it1 = std::inserter(s, s.begin()); auto it2 = std::inserter(s, s.en
4.0.0 com.amkit myapp SpringMVCFirst
我目前使用 Eclipse 作为其他语言的 IDE,而且我习惯于不必离开 IDE 做任何事情 - 但是我真的很难为纯 ECMAScript-262 找到相同或类似的设置。 澄清一下,我不是在寻找 DO
我想将带有字符串数组的C# 结构发送到C++ 函数,该函数接受void * 作为c# 结构和char** 作为c# 结构字符串数组成员。 我能够将结构发送到 c++ 函数,但问题是,无法从 c++ 函
我正在使用动态创建的链接: 我想为f:param附加自定义转换器,以从#{name}等中删除空格。 但是f:param中没有转换器
是否可以利用Redis为.NET创建后写或直写式缓存?理想情况下,透明的高速缓存是由单个进程写入的,并且支持从数据库加载丢失的数据,并每隔一段时间持久保存脏块? 我已经搜查了好几个小时,也许是goog
我正在通过bash执行命令的ssh脚本。 FILENAMES=( "export_production_20200604.tgz" "export_production_log_2020060
我需要一个正则表达式来出现 0 到 7 个字母或 0 到 7 个数字。 例如:匹配:1234、asdbs 不匹配:123456789、absbsafsfsf、asf12 我尝试了([a-zA-Z]{0
我有一个用于会计期间的表格,该表格具有期间结束和开始的开始日期和结束日期。我使用此表来确定何时发生服务交易以及何时在查询中收集收入,例如... SELECT p.PeriodID, p.FiscalY
我很难为只接受字符或数字的 Laravel 构建正则表达式验证。它是这样的: 你好<-好的 123 <- 好的 你好123 <-不行 我现在的正则表达式是这样的:[A-Za-z]|[0-9]。 reg
您实际上会在 Repeater 上使用 OnItemDataBound 做什么? 最佳答案 “此事件为您提供在客户端显示数据项之前访问数据项的最后机会。引发此事件后,数据项将被清空,不再可用。” ~
我有一个 fragment 工作正常的项目,我正在使用 jeremyfeinstein 的 actionbarsherlock 和滑动菜单, 一切正常,但是当我想自定义左侧抽屉列表单元格时,出现异常
最近几天,我似乎平均分配时间在构建我的第一个应用程序和在这里发布问题!! 这是我的第一个应用程序,也是我们的设计师完成的第一个应用程序。我试图满足他所做的事情的外观和感觉,但我认为他没有做适当的事情。
我是一名优秀的程序员,十分优秀!