- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是一个一般性问题,可能适用于任何给定的语言,如 C、C++、Java 等。
我认为无论以何种方式实现它,都不会比使用 2 个循环更高效,后者的效率为 n^2。
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=1;
我最近在一次面试中被问到这个问题,想不出更有效的方法。我从面试官那里得到的只是,我可以使用递归或将二维数组转换为链表,使其比 n^2 更高效。任何人都知道这是否可能,如果是,如何?至少在理论上,如果不是在实践中。
编辑: 实际问题给了我两个单元格的坐标,我必须用 1 填充所有可能的最短路线所采用的路径。例如,如果我有一个 5x5 矩阵,并且我的两个坐标是 (2,0) 和 (3,3),我必须填写:
(2,0)(2,1)(2,2)(2,3) (3,0)(3,1)(3,2)(3,3)
同时让其余的细胞保持原样。
最佳答案
这取决于你的意思。如果问题是关于普通数组,意味着一系列连续的内存位置,而对于初始化,你的意思是在这个“矩阵”的每个内存位置放置一个值,那么答案是否,比 O(n *m) 是不可能的,我们可以证明:
让我们假设算法 fill(A[n][m], init_val)
是正确的(即填充 A
的所有内存位置)具有复杂性 g(n,m)
小于 O(n*m)
(意思是 g(n,m)
不是 Ω(n*m)
的一部分),然后足够大 n
和 m
我们会有那个g(n,m) < n*m
= 内存位置数。由于填充内存位置需要一次操作,因此算法 fill
最多可以填g(n,m)
locations[实际上是一半,因为它还必须至少执行一个操作来“选择”不同的内存位置,除非硬件提供组合操作]严格小于n*m
,这意味着算法 fill
不正确。
填写k
同理内存位置需要常数时间,你只需选择更大的 n
和 m
值(value)观。
正如其他人已经建议的那样,您可以使用其他数据结构来避免 O(n^2)
初始化时间。 amit 建议使用某种惰性求值,它允许您根本不初始化数组,而仅在访问元素时才进行初始化。
请注意,这会删除 Ω(n^2)
开始时成本较高,但需要更复杂的操作来访问数组的元素,并且还需要更多内存。
不清楚面试官的意思:将数组转换为链表需要 Ω(L)
时间(其中 L 是数组的长度),因此简单地将整个矩阵转换为链表需要 Ω(n^2)
时间加上真正的初始化。使用递归根本没有帮助,您只会以 T(n) = 2T(n/2) + O(1)
之类的重复出现而告终这将再次导致对渐近复杂性没有任何好处。
作为一般规则,所有算法都必须至少扫描所有输入,除非它们事先具有某种形式的知识(例如,元素已排序)。在您的情况下,要扫描的空间是 Θ(n^2)
因此每个想要填充它的算法都必须至少是 Ω(n^2)
.低于这个复杂度的任何东西要么做出一些假设(例如内存默认包含初始化值 -> O(1)
),要么解决不同的问题(例如使用惰性数组或其他数据结构)。
关于algorithm - 如何用常数值填充二维数组,效率比 n^2 更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416128/
我有一个 DIV #page,如果我在顶部添加边距,突然出现一个滚动条,即使该元素不大于主体。我怎样才能去掉滚动条? (参见 Fiddle) 我的 HTML I am a div siz
function getClosestValue(standardArray, targetVal) { standardArray = standardArray.sort(function(a,
我有 318x424 的书籍封面图片,我想做的是指定一张图片,并在其下方添加一个文本链接。初始 src 是 about:blank,这样如果响应式设计不显示框架,它就不会占用用户带宽。 框架的 HTM
我被这个问题困了两天了,还是没搞定。 基本上,我有一个二维数组,其中包含某些数字(在给定范围内)之间的关系: 0 = 顺序无关紧要 1 = 第一个数字(左栏中的数字)应该是第一个 2 = 第二个数字(
只有当我在更高的 API 上进行调试时,我才会强制关闭脚本:16,但是当涉及到 API 时它工作正常:10。这可能是我的项目设置问题吗? 这是对服务器的简单请求,以获取 fragment 中的类别列表
给定下表books id | listorder ----+----------- 3 | 1 2 | 2 1 | 3 4 |
我想要那个密码切换功能,好像TextInputLayout有这个功能,而不是 TextInputEditText .但是正如您在下面的代码中看到的,即使我将高度设置为 wrap_content和 ap
似乎从 读取给出空列表,它主要发生在延迟较高的网络上的主机上。是否有更强大的与远程主机交互的方式? use Net::SSH2; # my $ssh = Net::SSH2->new(); # ..
为了在 Play 商店中发布我的应用程序,我必须将 TargetSdkVersion 从 23 更改为 26。在我更改它之前,该应用程序运行良好!现在应用程序在启动时崩溃。我想通了,问题出在这两行:
我尝试了很多解决方案,但找不到一个。我有 3 个不同的列,其中包含不同类型的文本,我需要它们具有相同的高度。但它们是这样不同的:colums有人可以帮忙吗? 代码: .col-sm-2{
我尝试将一个 div 相对于其具有负顶值的父级定位。这工作正常,现在的问题是这个 div,即使它有一个负的 top 值也会使父 div 更大。 我该怎么做才能让父 div 不那么大? Here's a
这是一个一般性问题,可能适用于任何给定的语言,如 C、C++、Java 等。 我认为无论以何种方式实现它,都不会比使用 2 个循环更高效,后者的效率为 n^2。 for(i=0;i O(1) ),要么
我需要查找所有有订单的家庭。我根本不关心订单的数据,只关心它的存在。 (使用 SQL Server) 这样说是不是更有效率: SELECT HouseholdID, LastName, FirstNa
我有一个 UINavigationController,在屏幕顶部有一个 UINavigationBar,在底部有一个 UIToolbar。我想让工具栏高一点。这是我的代码: CGRect toolb
我正在使用自定义字体。该字体在我的 Windows PC 上完美运行,但在我的 Mac (Yosemite OSX) 上运行不佳。正如您在图片中看到的,Mac 上的字体比 Windows 上的字体稍大
我正在尝试使用 FaSTLane 将我的应用程序作为 alpha 版本部署到 Play 商店,但出现此错误: Google Api 错误:multiApkShadowedActiveApk:任何设备都
我在这里找不到神奇的调味料。看起来 API 不支持它,所以我想我正在寻找一些 CSS 来使 slider 更大。 我得到的是左边的,但我想把它设计成右边的样子?任何 CSS 技巧或以前有人这样做过。
如果我运行这段代码: float a=1.123456789; printf("The float value is %f\n",a); double b=1.123456789876543 prin
我正在尝试使用 strip binary 来剥离我的目标文件。我在 gcc-7 上构建了最新的 binutils,但我的代码库使用 gcc-4.9.2。Binutils 是为 64 位架构构建的,我的
有没有办法让 iPhone 应用的“内容”区域感知到更大的导航栏? 类似这些问题: iOS: Adding a fixed image just below the navigation bar iO
我是一名优秀的程序员,十分优秀!