问题标签 [programming-pearls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 以下程序中的位掩码用法来自 Programming Pearls
我今天开始阅读“编程珍珠”,在练习时遇到了这个问题“你将如何实现自己的位向量?”。当我查看解决方案时,它是这样的:
我感到困惑的地方是这个声明
有人可以解释一下这里发生了什么吗?
sorting - 用 1 MB 空间对 1000 万个整数进行排序解决方案解释 - Programming Pearls
我正在阅读“Programming Pearls”,我对其中一个解决方案解释感到非常困惑。
问题是:“一个文件最多包含 n 个正整数,每个小于 n,其中 n = 10^7。每个正整数最多可以出现十次。你会如何对文件进行排序?”
书中给出的解决方案: “如果每个整数最多出现十次,那么我们可以在一个四位半字节中计算它的出现次数。使用问题 5(如下)的解决方案,我们可以一次性对整个文件进行排序10,000,000/2 字节,或在 k 次传递中 10,000,000/2k 字节"
问题 5 的解决方案是:双通道算法首先使用 5,000,000/8 = 625,000 个字的存储空间对整数 0 到 4,999,999 进行排序,然后在第二遍中对 5,000,000 到 9,999,999 进行排序。k-pass 算法在时间 kn 和空间 n/k 上最多排序 n 个小于 n 的非重复正整数。)
我不知道作者是如何到达 10,000,000/2k 空间进行排序的。我的意思是,基于问题 5 的解决方案,首先我们需要 625K 字节的空间来进行第一遍排序,并且每个整数需要额外的 1/2 字节来存储计数,对吗?
有人可以帮我理解这一点吗?
非常感谢。
c++ - 来自编程珍珠的示例
在 Programming Pearls 中有一种算法可以对不同长度的数组进行排序,但排序的时间与它们的长度之和成正比。例如,如果我们有一个记录数组x[0...n-1]
,并且每条记录都有一个整数长度和一个指向数组的指针bit[0...length-1]
。
代码是这样实现的:
我的问题是,鉴于记录:
我知道如何获取字符串长度,但是使用位数组呢?我怎样才能制作一个适合这个字符串数组的位数组?甚至x[i].bit[depth]
我该如何实现呢?
matrix - 磁带上的矩阵转置
编程要点 第 7 题是关于转置4000 x 4000
存储在磁带上的矩阵。
我的解决方案是简单地使用一个临时变量并交换 and 的a[i][j]
内容a[j][i]
。
作者给出的解决方案让我有点困惑。他说我们应该:
- 将行和列索引添加到每个
- 按行对矩阵中的记录进行排序
- 删除附加的索引。
为什么要经历这么多麻烦才能完成这项工作?跟磁带有关系吗?
java - 为这些类型的字节级操作进行 java 编码的最佳方法是什么?
我正在阅读一些关于优化方法的问题。
在如何对特定范围内的数字进行排序的问题中,解决方案是使用位图。如果一个数字可以出现例如多达 10 次,则使用半字节来映射数字并作为计数器来表示出现的次数。
这个概念我很好理解。我的问题是如何以简单的方式在 Java 中实现这一点。
我被困在位操作上。
例如,对于将计数器增加 1 的第一部分,我能想到的是:
定位字节
EgbitValue[i]
然后做得到byte tmp = bitValue[i] & 0x0F
低位(如果计数器是低位计数器)。
然后执行tmp = tmp + 1
1 递增。
然后执行bitValue[i] >> 2
清除低端位,然后bitValue[i] <<2
恢复。现在我们有与原始相同的高位和清除低位。
然后做bitValue[i] |= tmp
设置低位。
现在bitValue
低位计数器增加了 1。对吗?
对于高位,这将是相同的过程,但对于高位。
然后当我必须检查计数器的编号是多少时。
我想使用位掩码:
0x0
0x1
0x2
等并OR
用来检查当前的计数器编号是多少。
所有这些似乎都太复杂了。我在正确的轨道上吗?在 Java 编码中如何最好地处理这些操作?
非常欢迎对此提出任何意见和指导。
web - 使用个人网站托管将 Sawtooth 软件 ACA 调查上传到网络
该软件为我创建了一个 Web Upload 文件夹,我使用 FTP 客户端(特别是 WS_FTP)将其上传到站点。珍珠文件的第一行说“#!usr/bin/pearl”,我将其更改为“/home/calakpsi/pearl”。但是,当我执行 html 文件时,它会在“/C:/Users/myname/AppData/Roaming/Ipswitch/WS_FTP/Storage/cgi-bin/ciwweb.pl”下搜索我的计算机。我确定它正在寻找的文件在那个文件夹中,但由于某种原因,网页仍然无法执行。
任何帮助或分步解决方案(因为我没有深入的技术背景)将不胜感激。
bitmap - 使用更多空间编程珍珠的恒定时间进行初始化 - 第 1 列
我正在阅读“Programming Pearls”,我对其中一个解决方案解释感到非常困惑——第 1 列中的问题 9。
问题是:当使用位图数据表示一组整数时,第一阶段将该组初始化为空。但是初始化空间本身可能需要大量时间。展示如何通过设计一种技术在第一次访问向量时将其初始化为零来规避此问题。
答案是:初始化向量数据[0...n-1] 的效果可以通过包含在两个额外的 n 元素向量from和to以及一个整数top中的签名来实现。如果元素 数据[i] 已经被初始化,那么from [i] < top and to [*from*[i]] = i。因此from是一个简单的签名,to和top一起确保from不会被内存的随机内容意外签名。
我已多次阅读此答案。我不明白。
有人可以解释一下吗?
谢谢,
shell - 读取 csv 文件
我有逗号分隔的平面文件,其内容如下。
我只需要为每个人获取姓名和联系方式。如果我使用分隔符作为“”,则 A 和 D 的联系人将是班加罗尔和兰契,这是不正确的。如何获得第一个和第四个字段。另外请告知我是否可以使用 awk 命令获取所需的详细信息
编辑 只是添加这是示例数据,我的原始数据将有更多字段,引号内的任何字段也可以有逗号。
programming-pearls - 最大子数组
在“编程珍珠”第8栏。存在最大子数组问题。
问题 :
输入是一个包含 n 个浮点数的向量 x;输出是在输入的任何连续子向量中找到的最大和。为了完成问题定义,我们将说当所有输入为负时,最大和子向量是空向量,其和为零。
最有效的解决方案:
本专栏有一个练习: 我们将负数数组的最大子向量定义为零,即空子向量之和。假设我们将最大子向量定义为最大元素的值;您将如何更改各种程序?
我对这个练习有两个问题 (1)我对“假设我们已经将最大子向量定义为最大元素的值”感到有点困惑。这是否意味着负数数组的最大子向量是数组中的最大元素?
例如:数组:[-1 -2 -3],最大子向量:-1 数组:[-1 2 3],最大子向量:[2 3]
对不起这个愚蠢的问题,英语不是我天真的语言。
(2)作者给出了解决方案:“将赋值maxsofar=0替换为maxsofar = -infinity。” 根据我对问题的理解,这个解决方案似乎是不正确的。
例如:数组:[-1 -2 -3],答案应该是-1。但是根据解决方案,它是0。
谢谢,
algorithm - 随机序列的最大连续子序列和的期望
这是 Programming Pearls 第 2 版(第 8.7 章)中的一个问题:
考虑一个实数序列,它的元素是从 range 中均匀抽取的
[-1, 1]
,预期的最大连续子序列总和是多少?(如果所有元素都是负数,则最大和为0
。)
假设序列的长度为N
,是否存在预期最大子序列总和的封闭形式f(N)
?我尝试做一些模拟,但没有找到任何线索。
感谢帮助。