是否可以反转具有恒定额外空间的数组?

2024-02-09

假设我有一个数组A with n系列中的独特元素[0, n)。换句话说,我有整数 [0, n) 的排列。

是否可以转型A into B使用 O(1) 额外空间(又名就地),这样B[A[i]] = 我?

例如:

       A                  B
[3, 1, 0, 2, 4] -> [2, 1, 3, 0, 4]

是的,这是可能的,使用 O(n^2) 时间算法:

获取索引 0 处的元素,然后将 0 写入该元素索引的单元格。然后使用刚刚覆盖的元素来获取下一个索引并在那里写入上一个索引。继续,直到回到索引 0。这是循环引导算法。

然后从索引 1, 2, ... 开始执行相同的操作,但在进行任何更改之前,请从该索引开始执行循环引导算法,而不进行任何修改。如果此循环包含低于起始索引的任何索引,则跳过它。


或者这个 O(n^3) 时间算法:

获取索引 0 处的元素,然后将 0 写入该元素索引的单元格。然后使用刚刚覆盖的元素来获取下一个索引并在那里写入上一个索引。继续,直到返回到索引 0。

然后从索引 1, 2, ... 开始执行相同的操作,但在进行任何更改之前,从所有前面的索引开始执行循环引导算法,而不进行任何修改。如果当前索引出现在任何先前的循环中,则跳过它。


我已经写了(稍微优化)执行 http://ideone.com/blO4u0C++11 中的 O(n^2) 算法,用于确定如果随机排列反转,每个元素平均需要多少次额外访问。结果如下:

size accesses
2^10 2.76172
2^12 4.77271
2^14 6.36212
2^16 7.10641
2^18 9.05811
2^20 10.3053
2^22 11.6851
2^24 12.6975
2^26 14.6125
2^28 16.0617

虽然大小呈指数增长,但元素访问的数量几乎呈线性增长,因此随机排列的预期时间复杂度类似于 O(n log n)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以反转具有恒定额外空间的数组? 的相关文章

  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 具有恒定长度的 System.arraycopy

    我正在玩 JMH http openjdk java net projects code tools jmh http openjdk java net projects code tools jmh 我偶然发现了一个奇怪的结果 我正在对制
  • 重新排列数组键 php [重复]

    这个问题在这里已经有答案了 我有这个数组 Array 15 gt 13 1 16 gt Mark one answer 19 gt You see a car on the hard shoulder of a motorway with
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo
  • 我可以让这个 Ruby 代码更快并且/或使用更少的内存吗?

    我有一个Array of StringRuby 中的对象由如下单词组成 animals cat horse dog cat dog bird dog sheep chicken cow 我想将其转换为另一个Array of String对象
  • 需要解释搜索最小大和的算法

    我正在解决 Codility 问题作为练习 但无法回答其中一个问题 我在互联网上找到了答案 但我不明白这个算法是如何工作的 有人可以引导我逐步完成它吗 这是问题 You are given integers K M and a non em
  • 如何循环结构体数组并显示所有键值

    我正在循环结构数组并尝试分配和存储所有键值 如果我将内循环包裹起来
  • 如何将我的 json 字符串 avro 二进制编码为字节数组?

    我有一个实际的 JSON 字符串 我需要将其 avro 二进制编码为字节数组 在经历了Apache Avro 规范 http avro apache org docs 1 7 7 spec html 我想出了下面的代码 我不确定这是否是正确
  • Java 模 2**64 求逆

    给定一个奇数long x 我在找long y这样他们的乘积模2 64 即 使用正常的溢出算术 等于 1 为了明确我的意思 这可以在几千年内计算出来 for long y 1 y 2 if x y 1 return y 我知道可以使用扩展欧几
  • 调整ArrayBuffer的大小

    如果我想创建一个数组缓冲区 我会写 var buff new ArrayBuffer size 但是如何调整现有缓冲区的大小呢 我的意思是 在缓冲区末尾添加更多字节 ArrayBuffer 本身没有设置 有set https develop
  • 使用静态指针的动态内存分配

    有人可以向我解释一下为什么下面的代码会这样工作吗 这里我已经初始化了outd作为文件中的静态指针code2 c 然后我动态地为其分配内存malloc 从单独文件中的主函数中一次又一次地调用它code1 c 它看起来整个数组以静态方式运行 因
  • 合并 2 个数组并合并数字键的结果

    我有 2 个数组 我希望通过每个数字键将其中合并 分组在一起 例如 Array1 2009 gt 131 2008 gt 940 2007 gt 176 2006 gt 1 Array2 2008 gt 9 2007 gt 3 我希望输出是
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带

随机推荐

  • 选择小数点后 4 位以上的数字

    我有一个 SQL 表 其中有一个浮点列 其中填充了如下值 1 4313 3 35 2 55467 6 22456 3 325 我需要选择仅包含小数点后 4 位以上的值的行 在这种情况下 选择必须返回 2 55467 6 22456 有想法吗
  • 在 H5PY 中打开文件时出错(未找到文件签名)

    我一直在使用以下代码来打开一些 HDF5 文件 这些文件是在 MATLAB 中使用 H5PY 在 python 中生成的 import h5py as h5 data dataset mat f h5 File data r 但是我收到以下
  • 更大的运算符“">”是否满足严格的弱排序?

    定义 Let lt 是一个二元关系 其中a lt b means a小于b Let gt 是一个二元关系 其中a gt b means a大于b 所以 我们假设 lt and gt 具有我们在日常生活中通常使用的含义 不过 在某些编程语言
  • 有人可以解密这个javascript吗

    我在一个论坛中找到它 告诉我这段代码可以让我自动玩 Facebook 游戏 但我担心这不是他们所说的 我担心这是恶意脚本 请帮忙 javascript var 0x8dd5 x73 x72 x63 x73 x63 x72 x69 x70 x
  • 将 .db 文件导入 R

    我正在尝试使用下面的代码导入 db 文件 该代码与包的示例相同 并且显示找不到函数 有人知道如何导入 db 文件吗 library ProjectTemplate db reader c3 db Users xxx Documents c3
  • 在 Startup.cs .net core 2.1 中加载程序集

    我在名为 nuqkgs 的文件夹中有块包 在项目启动时我想将这些包 有 dll 加载到项目中以在运行时使用 我使用下面的代码来加载它们 当我调试时 我可以看到信息 并且找到并打开了 dll 但是当应该使用它们时 我收到错误 找不到 dll
  • TEdgeBrowser 模态打印对话框?

    TEdge浏览器有替换了 TWebBrowser https docwiki embarcadero com RADStudio Alexandria en Using TEdgeBrowser Component and Changes
  • 更改默认图标工具栏(传单)

    我如何将默认工具栏图标更改为传单上的其他图标 上面的图片显示了图标的默认视图 我想自定义图标并将其更改为其他图标 例如我希望第一个图标看起来像桥梁和第二个文本图标等等 我已经尝试了几种方法但没有成功 这是我的代码 var electricp
  • 在 lapply 函数中访问和保留列表名称

    我需要访问 lapply 函数内的列表名称 我在网上找到了一些线程 据说我应该迭代列表的名称 以便能够获取函数中的每个列表元素名称 gt n names mylist gt mynewlist lapply n function namei
  • 在另一个视图控制器中更改标签的文本

    我有一个名为 FirstViewController 的视图控制器 还有一个名为 SecondViewController 的视图控制器 我提出第二个视图控制器 UIViewController controller self storyb
  • 在 C 中声明和修改字符串

    我最近开始尝试学习C语言 在我的第一个程序 简单的 hello world 事情 中 在我意识到我不能这样做之后 我遇到了声明字符串的不同方法variable name string data char variable name data
  • Solr 和 MySQL,如何保持更新的索引,以及,如果很简单,是否还需要数据库?

    我是 Solr 的初学者 所以请耐心等待 在我当前的项目中 我有一个非常简单的数据库 只有 1 个表 其中包含 4 个字段 id name subject msg 据我了解 每次添加 或删除 新记录时 我都需要将该记录添加到索引中 本质上执
  • 如何计算具有三角形面的网格的质心?

    我想根据以下描述计算网格的新质心 但我不想使用 Blender 的内置函数来计算质心 如所解释的here https blender stackexchange com questions 14294 how to recenter an
  • 如何保存pip包

    我们有一个基于 python django 的 Web 应用程序 其中许多组件都是使用 pip 安装的 所以我想问是否有一种方法可以保存或下载并保存我们正在 pip install 的特定 python 包 例如 pip install d
  • 将 md5 哈希字节数组转换为字符串

    如何将哈希结果 字节数组 转换为字符串 byte bytePassword Encoding UTF8 GetBytes password using MD5 md5 MD5 Create byte byteHashedPassword m
  • 在Java中像表格一样打印二维数组[重复]

    这个问题在这里已经有答案了 我想像表格一样打印输入的二维数组 也就是说 如果出于某种原因他们全都输入 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 就像上面一样 但在 Java Eclipse 的控制台中 没有花哨的按
  • “404 重定向”是合法的重定向吗?

    我遇到的情况是 某些用户可能会通过链接等进入错误输入的页面 在大多数情况下 我可以确定应显示的正确页面 因此我想重定向到正确的 URL 301 重定向适合这种情况吗 301 的意思是 永久移动 但在这种情况下 该文档一开始就不存在 设置 4
  • 实体框架核心:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“关系”中插入标识列的显式值

    我正在构建一个应用程序 当我想将表单插入表单表时 出现以下错误 无法在表 关系 中插入标识列的显式值 当 IDENTITY INSERT 设置为 OFF 时 这些是我的模型 表格型号 DatabaseGenerated DatabaseGe
  • 如何向 OpenDayLight Karaf 添加新功能?

    如何将新功能添加到 ODL Oxygen SR3 0 8 3 作为 Karaf 模块 例如 我从以下位置下载了预构建的 ODL 官方网站 https nexus opendaylight org content repositories p
  • 是否可以反转具有恒定额外空间的数组?

    假设我有一个数组A with n系列中的独特元素 0 n 换句话说 我有整数 0 n 的排列 是否可以转型A into B使用 O 1 额外空间 又名就地 这样B A i 我 例如 A B 3 1 0 2 4 gt 2 1 3 0 4 是的