- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”:
((⍴X)⍴⍋⍋X⍳X,Y)⍳(⍴Y)⍴⍋⍋X⍳Y,X ⍝ idiom #1
((⍋X⍳X,Y)⍳⍳⍴X)⍳(⍋X⍳Y,X)⍳⍳⍴Y ⍝ idiom #5
在这种口是心非的背后是否有任何重要的身份?
旁注:
APL 对身份的强调从一开始就是 APL 与众不同的特征之一。 APL 的创始人 Kenneth Iverson 说:
”同一性是两个不同表达式之间的等价。尽管恒等式通常仅被认为是数学分析的工具,但它们可以成为一种重要的实用工具,用于简化和以其他方式修改用于定义函数的表达式。”
最佳答案
这些成语有一些共同点。两者的最后一步是索引操作,它们都使用某种镜像连接策略,也许最重要的是,左右参数的输出对于两者都是相同的。这大大简化了对身份的搜索,因为我们可以将 #1 的正确参数与 #5 的正确参数进行比较:
(⍴Y)⍴⍋⍋X⍳Y,X ⍝ right arg #1
(⍋X⍳Y,X)⍳⍳⍴Y ⍝ right arg #5
可以简化搜索的另一件事是删除或修改任何截断输出的内容,因为两个参数的输出在没有截断的情况下是相同的。习语#1使用(⍴Y)⍴
将其截断为Y
的长度,而习语#5中右参数的长度取决于的长度
。第一种情况可以去掉截断,第二种可以修改为⍳⍴Y
中的YY,X
的全长:
⍋⍋X⍳Y,X ⍝ #1
(⍋X⍳Y,X)⍳⍳⍴Y,X ⍝ #5
鉴于两个表达式都包含 ⍋X⍳Y,X
,让我们将其分配给变量 A ← ⍋X⍳Y,X
并简化。然而,重要的是要指出,我们现在拥有的恒等式仅适用于 A 是置换向量的情况,稍后我将详细讨论这一点。同时,我们有这个身份:
⍋A ←→ A⍳⍳⍴Y,X
由于“Y,X”在此表达式中除了提供矢量长度外什么都不做,并且由于该长度等于“A”,因此恒等式可以简化为其最终形式:
⍋A ←→ A⍳⍳⍴A, where A is a permutation vector
这很有道理。标识左侧的升级运算符返回 A
的每个值在按升序排列时将具有的索引值。右侧的 index-of 运算符返回 A 中 ⍳⍴A
的升序值所在的索引。例如:
5 2 1 4 3 ⍝ A←5 2 1 4 3
3 2 5 4 1 ⍝ ⍋A
5 2 1 4 3 ⍝ A←5 2 1 4 3
1 2 3 4 5 ⍝ ⍳⍴A
3 2 5 4 1 ⍝ A⍳⍳⍴A
查看最后两行,1 在 A 中的索引为 3,2 有 2,3 有 5,4 有 4,最后 5 的索引为 1。这是有道理的,因为这几乎是定义升级运算符的作用。
置换向量
如前所述,此恒等式仅在 A 是置换向量时有效。在他的文章 Notation as a Tool of Thought 中,Kenneth Iverson 定义了一个排列向量:“一个向量 P,其元素是其索引的某种排列(即 ^/1=+/P∘.= ⍳⍴P) 将被称为置换向量。”查看一些成语本身,您可以看到这个想法以各种方式表示:
Y[⍋Y]^.=X[⍋X] #6 permutations of each other
X^.=⍋⍋X #7 test if permutation vector
X[⍋X]^.=⍳⍴X #29 test if permutation vector
⍋X #48 Inverting a permutation
X⍳⍳⍴X #212 Inverting a permutation
^/1=+⌿X∘.=⍳⍴X #281 test if permutation vector
^/(⍳⍴X)∊X #454 test if permutation vector
A←⍳⍴X ⋄ A[X]←A ⋄ A #654 Inverting a permutation
在成语#7 中,表达式的右侧是升基数成语,我在另一个 post 中讨论过。 ,在那篇文章中,我谈到了升级运算符在排名和索引这两种状态之间来回切换的事实,因此我们有以下两个身份:
⍋X ←→ ⍋⍋⍋X ←→ ⍋⍋⍋⍋⍋X ...
⍋⍋X ←→ ⍋⍋⍋⍋X ←→ ⍋⍋⍋⍋⍋⍋X ...
第二个身份可以扩展如下,如果 X 是一个排列向量,如习语 #7 所建立的:
X ←→ ⍋⍋X ←→ ⍋⍋⍋⍋X ←→ ⍋⍋⍋⍋⍋⍋X …
我们知道升级运算符会返回从 1 到参数中值个数的所有数字。再应用两次升级运算符,您将以相同的顺序获得完全相同的向量。因此习语 #7 只是说置换向量是一个包含从 1 到某个其他值的所有数字一次且仅一次的向量。 (这里假定 1 被设置为第一个索引值。)
关于上面的习语列表,另一个有趣的地方是习语#48 和#212 是答案中讨论的身份的左侧和右侧:
⍋A ←→ A⍳⍳⍴Y,X
关于algorithm - 渐进式索引成语中的 APL 身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496378/
我在一本书(Interview Question)中读到这个问题,想在这里详细讨论这个问题。请点亮它。 问题如下:- 隐私和匿名化 马萨诸塞州集团保险委员会早在 1990 年代中期就有一个绝妙的主意
我最近接受了一次面试,面试官给了我一些伪代码并提出了相关问题。不幸的是,由于准备不足,我无法回答他的问题。由于时间关系,我无法向他请教该问题的解决方案。如果有人可以指导我并帮助我理解问题,以便我可以改
这是我的代码 public int getDist(Node root, int value) { if (root == null && value !=0) return
就效率而言,Strassen 算法应该停止递归并应用乘法的最佳交叉点是多少? 我知道这与具体的实现和硬件密切相关,但对于一般情况应该有某种指南或某人的一些实验结果。 在网上搜索了一下,问了一些他们认为
我想学习一些关于分布式算法的知识,所以我正在寻找任何书籍推荐。我对理论书籍更感兴趣,因为实现只是个人喜好问题(我可能会使用 erlang(或 c#))。但另一方面,我不想对算法进行原始的数学分析。只是
我想知道你们中有多少人实现了计算机科学的“ classical algorithms ”,例如 Dijkstra's algorithm或现实世界中的数据结构(例如二叉搜索树),而不是学术项目? 当有
我正在解决旧编程竞赛中的一些示例问题。在这个问题中,我们得到了我们有多少调酒师以及他们知道哪些食谱的信息。制作每杯鸡尾酒需要 1 分钟,我们需要使用所有调酒师计算是否可以在 5 分钟内完成订单。 解决
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我开始学习 Nodejs,但我被困在中间的某个地方。我从 npm 安装了一个新库,它是 express -jwt ,它在运行后显示某种错误。附上代码和错误日志,请帮助我! const jwt = re
我有一个证书,其中签名算法显示“sha256rsa”,但指纹算法显示“sha1”。我的证书 SHA1/SHA2 的标识是什么? 谢谢! 最佳答案 TL;TR:签名和指纹是完全不同的东西。对于证书的强度
我目前在我的大学学习数据结构类(class),并且在之前的类(class)中做过一些算法分析,但这是我在之前的类(class)中遇到的最困难的部分。我们现在将在我的数据结构类(class)中学习算法分
有一个由 N 个 1x1 方格组成的区域,并且该区域的所有部分都是相连的(没有任何方格无法到达的方格)。 下面是一些面积的例子。 我想在这个区域中选择一些方块,并且两个相邻的方块不能一起选择(对角接触
我有一些多边形形状的点列表,我想将其包含在我页面上的 Google map 中。 我已经从原始数据中删除了尽可能多的不必要的多边形,现在我剩下大约 12 个,但它们非常详细以至于导致了问题。现在我的文
我目前正在实现 Marching Squares用于计算等高线曲线,我对此处提到的位移位的使用有疑问 Compose the 4 bits at the corners of the cell to
我正在尝试针对给定算法的约束满足问题实现此递归回溯函数: function BACKTRACKING-SEARCH(csp) returns solution/failure return R
是否有包含反函数的库? 作为项目的一部分,我目前正在研究测向算法。我正在使用巴特利特相关性。在 Bartlett 相关性中,我需要将已经是 3 次矩阵乘法(包括 Hermitian 转置)的分子除以作
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
问题的链接是UVA - 1394 : And There Was One . 朴素的算法是扫描整个数组并在每次迭代中标记第 k 个元素并在最后停止:这需要 O(n^2) 时间。 我搜索了一种替代算法并
COM 中创建 GUID 的函数 (CoCreateGUID) 使用“分散唯一性算法”,但我的问题是,它是什么? 谁能解释一下? 最佳答案 一种生成 ID 的方法,该 ID 具有一定的唯一性保证,而不
在做一个项目时我遇到了这个问题,我将在这个问题的实际领域之外重新措辞(我想我可以谈论烟花的口径和形状,但这会使理解更加复杂).我正在寻找一种(可能是近似的)算法来解决它。 我有 n 个不同大小的容器,
我是一名优秀的程序员,十分优秀!