algorithm相关内容

如何使用归并排序算法就地排序?

我知道这个问题不太具体. 我只想有人告诉我如何将普通合并排序转换为就地合并排序(或具有恒定额外空间开销的合并排序). 我只能找到(在网上)说“它太复杂"或“超出本文范围"的页面. 唯一已知的就地合并方法(没有任何额外空间)过于复杂,无法简化为实用程序.(取自从这里) 即使太复杂了,如何就地进行归并排序的基本概念是什么? 解决方案 Knuth 将此作为练习(第 3 卷 ..
发布时间:2022-01-31 08:28:24 其他开发

Swift:拆分 [String] 得到具有给定子数组大小的 [[String]] 的正确方法是什么?

从一个大的 [String] 和给定的子数组大小开始,我可以将这个数组拆分为更小的数组的最佳方法是什么?(最后一个数组将小于给定的子数组大小). 具体例子: 使用最大拆分大小 2 拆分 [“1"、“2"、“3"、“4"、“5"、“6"、“7"] 代码将产生 [[“1"、“2"]、[“3"、“4"]、[“5"、“6"]、[“7"]] 显然我可以更手动地执行此操作,但我觉得像 ..
发布时间:2022-01-30 18:51:47 移动开发

如何在现代 C++ 中实现经典排序算法?

C++ 标准库中的 std::sort 算法(及其表亲 std::partial_sort 和 std::nth_element)是在大多数实现中更基本的排序算法的复杂和混合合并,例如选择排序、插入排序、快速排序、合并排序或堆排序. 这里和姐妹网站上有很多问题,例如 https://codereview.stackexchange.com/ 与错误、复杂性有关以及这些经典排序算法实现的其他方 ..
发布时间:2022-01-30 16:15:12 C/C++开发

使用 Random 和 OrderBy 是否是一个好的 shuffle 算法?

我已经阅读了 一篇文章,关于各种 shuffle 算法在 编码恐怖.我已经看到有人在某处这样做来洗牌: var r = new Random();var shuffled = ordered.OrderBy(x => r.Next()); 这是一个好的洗牌算法吗?它是如何工作的?这是一种可接受的方式吗? 解决方案 这不是我喜欢的洗牌方式,主要是因为它是 O(n log n) 没有充分的 ..
发布时间:2022-01-30 10:03:38 C#/.NET

Arduino:将数据存储在 EEPROM 中的轻量级压缩算法

我想用 ATmega168/将大量数据存储到我的 Arduino 上ATmega328 微控制器,但遗憾的是只有 256 KB/512 KB 的 EEPROM 存储空间. 我的想法是使用压缩算法来减少大小.但是,我对压缩算法的了解非常少,而且我对现成库的搜索失败了. 那么,有没有优化存储大小的好方法呢? 解决方案 你可以看看 LZO 算法,设计为轻量级.我不知道AVR系统是否有 ..
发布时间:2022-01-25 13:01:59 其他开发

使用 1 MB RAM 对 100 万个 8 位十进制数字进行排序

我有一台具有 1 MB RAM 且没有其他本地存储的计算机.我必须使用它通过 TCP 连接接受 100 万个 8 位十进制数字,对它们进行排序,然后通过另一个 TCP 连接将排序后的列表发送出去. 数字列表可能包含重复项,我不能丢弃.代码将放在 ROM 中,所以我不需要从 1MB 中减去我的代码大小.我已经有了驱动以太网端口和处理 TCP/IP 连接的代码,它的状态数据需要 2 KB,包括一 ..
发布时间:2022-01-25 12:21:46 其他开发

低内存条件下的LZW压缩/解压

任何人都可以指点我如何在低内存条件下( 解决方案 大家使用的 zlib 库臃肿等问题(嵌入式).我很确定它不适用于您的情况.我有更多的内存,可能是 16K,但无法适应.它分配和归零大块内存并保留内容的副本等.算法也许可以做到,但找到现有代码是一个挑战. 我用 http://lzfx.googlecode.com 解压循环很小,它是较旧的 lz 类型压缩依赖于先前的结果,因此您需要访问未压 ..
发布时间:2022-01-25 12:17:29 其他开发

给定 5 个数字,找到中位数所需的最小比较次数是多少?

一般而言,您如何设置最小比较次数? 解决方案 引用 Donald Knuth(通过 Wikipedia,因为我目前没有我的 TAOCP 副本),比较次数的下限是六: http://en.wikipedia.org/wiki/Selection_algorithm(向下滚动到标题为“下界"的部分). 实际上,您的目标是找到 k 个最小值,其中 k 是列表大小的一半,向上取整(因此 ..
发布时间:2022-01-25 09:47:11 其他开发

获取大于数字的元素个数

我正在尝试解决以下问题:正在将数字插入容器中.每次插入一个数字时,我都需要知道容器中有多少元素大于或等于当前插入的数字.我相信这两种操作都可以在对数复杂度中完成. 我的问题:C++ 库中是否有可以解决问题的标准容器?我知道 std::multiset 可以在对数时间内插入元素,但是如何查询呢?还是我应该实现一个数据结构(例如二叉搜索树)来解决它? 解决方案 好问题.我认为 STL 中 ..
发布时间:2022-01-24 21:19:35 C/C++开发

寻找具有 O(1) 索引和 O(log(n)) 插入和删除的数据容器

我不确定这是否可能,但对我来说似乎有点合理,我正在寻找一种允许我执行这些操作的数据结构: 用 O(log n) 插入一个项目 用 O(log n) 移除一个项目 查找/编辑 O(1) 中的第 k 个最小元素,用于任意 k(O(1) 索引) 当然,编辑不会导致元素顺序发生任何变化.使之成为可能的原因是我将以递增的顺序一个接一个地插入元素.因此,例如,如果我尝试第五次插入,我确信在这之 ..
发布时间:2022-01-24 20:51:09 其他开发

使用 STL 容器进行中位数计算时,正确的方法是什么?

假设我需要从 1000000 个随机数值序列中检索中位数. 如果使用任何但 std::list,我没有(内置)方法来对中值计算的序列进行排序. 如果使用 std::list,我无法随机访问值来检索排序序列的中间(中位数). 自己实现排序并使用例如是否更好?std::vector,还是使用std::list和使用std::list::iterator来for-loop-走到中间值? ..
发布时间:2022-01-24 20:24:29 C/C++开发

具有自定义比较谓词的 heapq

我正在尝试使用自定义排序谓词构建堆.由于进入它的值是“用户定义"类型,我无法修改它们的内置比较谓词. 有没有办法做类似的事情: h = heapq.heapify([...], key=my_lt_pred)h = heapq.heappush(h, key=my_lt_pred) 或者更好的是,我可以将 heapq 函数包装在自己的容器中,这样我就不需要继续传递谓词了. 解决方案 ..
发布时间:2022-01-24 20:20:36 Python

在 Perl 中确定范围重叠的最快方法

我有两组范围.每个范围都是一对整数(开始和结束),表示单个较大范围的某个子范围.两组范围的结构与此类似(当然 ...s 将替换为实际数字). $a_ranges ={a_1 =>{开始=>...,结束=>...,},a_2 =>{开始=>...,结束=>...,},a_3 =>{开始=>...,结束=>...,},# 等等};$b_ranges ={b_1 =>{开始=>...,结束=>..., ..
发布时间:2022-01-24 20:13:45 其他开发

您如何将整数数组显示为一组范围?(算法)

给定一个整数数组,迭代它并找出它所涵盖的所有范围的最简单方法是什么?例如,对于一个数组,例如: $numbers = array(1,3,4,5,6,8,11,12,14,15,16); 范围是: 1,3-6,8,11-12,14-16 解决方案 如果数组按升序排序,那么问题就简单了.定义一个 Range 结构或类,它有一个开始和一个结束.然后遍历数组.如果当前元素比前一个元素多一个, ..
发布时间:2022-01-24 20:12:57 其他开发

如何将一组重叠范围划分为非重叠范围?

假设您有一组范围: 0 - 100: 'a' 0 - 75:'b' 95 - 150: 'c' 120 - 130:'d' 显然,这些范围在某些点重叠.您将如何剖析这些范围以生成不重叠范围的列表,同时保留与其原始范围相关的信息(在本例中为范围后面的字母)? 例如上面运行算法后的结果是: 0 - 75:'a'、'b' 76 - 94: 'a' 95 - 100:'a ..
发布时间:2022-01-24 20:11:55 Python

范围小于 k 的子数组的数量

给定一个(未排序的)数组 S 和某个整数 k,求 i,j 对的数量,使得 S[i...j] 的范围 ķ.其中范围是 max(S[i...j]) - min(S[i...j]). 我在一次采访中收到了这个问题,在对 S 进行排序后,我只能想出一个 O(nlogn) 的解决方案.但是,我被告知有一个 O(n) 的解决方案.有什么想法吗? 解决方案 从 i,j = 0 开始,我们可以迭代 ..
发布时间:2022-01-24 20:11:03 其他开发

给定一组范围 S 和一个重叠范围 R,找到 S 中包含 R 的最小子集

以下是某人给我的练习面试问题,我不确定最好的解决方案是什么: 给定一组范围: (例如 S = {(1, 4), (30, 40), (20, 91) ,(8, 10), (6, 7), (3, 9), (9,12), (11, 14)}. 并给定一个目标范围 R(例如 R = (3, 13) - 表示范围从 3 到 13).编写一个算法来找到覆盖目标范围的最小范围集.集合中的所有范围必须重 ..
发布时间:2022-01-24 20:09:20 其他开发