- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找一种算法,该算法可以为我提供具有特定强度的下一个排列。长度为 n 的排列由元素 (1,2,3,...n) 定义
排列的强度是多少?
长度为 10 的排列的强度定义为 |a1-a2|+|a2-a3|+...+|a9-a10|+|a10-a1|
。
例如:
(1,2,3,4,5,6)
强度 10
(1,2,6,3,4,5)
强度 14
是否存在计算给定强度和长度的下一个排列的公式,或者计算所有元素所必需的公式?
是否可以对子集进行排名/取消排名?
下一个排列函数应该返回给定强度和长度定义的子集中的下一个字典排列,而不计算中间排列不同的强度。
最佳答案
这是组合学中一个很好的掩蔽问题。首先,请注意这是一个整数环;线性“阵列”是一种实现选择,而不是强度分析的一部分。让我们看看第二种情况,以 (1,2,6,3,4,5)
形式给出:
1
5 2
4 6
3
每个元素恰好出现在两个术语中。因此,我们有一个元素的简单线性组合,系数为 -2、0 2。如果元素大于两个相邻元素(例如 5
),则系数为 2
;如果小于两个邻居(例如 1
),则为 -2;如果介于两者之间,则两个 abs
操作取消,并且它是 0(例如 4
)。
引理:强度必须是偶数。
因此,可以通过简单的分析很容易地检查求和和一些变换。最大数的系数总是+2;最小的总是具有 -2 的系数。
您可以通过查找可互换的元素来找到“近亲”排列。例如,您可以始终交换最大的两个元素(6 和 5)和/或最小的两个元素(1 和 2),而不影响强度。例如,6 和 5 可以互换,因为它们严格大于它们的邻居:
(6-2) + (6-3) + (5-1) + (5-4) =
(5-2) + (5-3) + (6-1) + (6-4) =
2*6 + 2*5 - 2 - 3 - 1 - 4
1 和 2 可以互换,即使它们是相邻的,出于类似的原因......除了只有三个项,其中一个涉及对:
(5-1) + (2-1) + (6-2) =
(5-2) + (2-1) + (6-1) =
5 + 6 - 2*1
根据数字集的分布,可能会有更直接的方法来构建具有给定强度的环。由于我们还没有对排列定义排序,因此我们无法确定“下一个”排列。然而,简单的方法是注意给定排列的旋转和反射都具有相同的强度:
(1,2,6,3,4,5)
(2,6,3,4,5,1)
(6,3,4,5,1,2)
...
(5,4,3,6,2,1)
(4,3,6,2,1,5)
...
这会让你动起来吗?
添加 w.r.t.操作更新:
有几种简单的强度不变交换可用。我已经提到了两个极端对 (6-5) 和 (1-2)。您还可以交换相邻的连续数字:在上例中添加 (4-5) 和 (3-4)。从简单的代数属性,您通常可以识别生成下一个所需排列的 2 元素交换或 3 元素旋转(考虑到字典位置的增加)。例如:
(5, 6, 1, 3, 4, 2)
(5, 6, 1, 4, 2, 3) rotate 3, 4, 2
(5, 6, 1, 4, 3, 2) swap 2, 3
但是,您很难以这种方式找到序列中的中断。例如,改变第一个或第二个元素的飞跃并不是那么干净:
(5, 6, 3, 1, 4, 2)
(5, 6, 3, 2, 4, 1) swap 1, 2 -- easy
(6, 1, 2, 4, 5, 3) wholesale rearrangement --
hard to see that this is the next strength=14
我觉得找到这些需要一组代数规则来找到简单的着法并消除无效着法(例如在上面的“批发重排”之前生成 563421)。然而,遵循这些规则通常比处理所有排列花费更多时间。
我很乐意发现我在最后一点上是错的。 :-)
关于arrays - 具有特定强度的下一个排列/排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549685/
我正在开发一个录音机应用程序。我想知道在录制音频时有什么方法可以找到音频的强度。我不想将录音保存在任何地方。我只想向用户展示麦克风捕捉到的声音是否大于预定义的阈值。 假设如果声音低于 2 分贝,它应该
我正在尝试让一个基本服务器(从 Beginning Python 复制)来发送一个 str。 错误: c.send( "XXX" ) TypeError: must be bytes or buffe
我陷入了一个问题,不知道去哪里看。我需要增加图像中特定颜色的强度,例如 R、G 或蓝色。当我这样做时,某些颜色无法正确呈现。 下面是我为测试拍摄的图像: 现在当我像绿色一样增加时: A = Color
我不希望我的背景图片太模糊。没有调整模糊强度的属性吗? let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) blurEffect
我使用 OpenCV 2.4.11+Qt 并尝试制作视频并更改红色/蓝色或绿色 channel 的强度,但没有找到任何功能或设置来执行此操作。有谁知道如何做到这一点? 最佳答案 如果您只想更改一个特定
当我有 x、y、强度时,我不知道如何创建热图(或等高线图)。我有一个看起来像这样的文件: 0,1,6 0,2,10 .... 到目前为止: with open('eye_.txt', 'r') as
有谁有一些可以在 iPhone 应用程序中使用的代码,让我可以看到 wifi 的强度吗?我有一个连接密集型操作,并且希望它们不在不稳定区域 最佳答案 这可能会帮助您走上正确的道路...... http
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
Eclipse SSH key 生成屏幕(常规 -> 网络连接 -> SSH2)生成 1024 位 RSA key ,该 key 太弱而无法使用 ( http://news.netcraft.com/
当从 RGB 转换为灰度时,据说应该对 R、G 和 B channel 应用特定的权重。这些权重是:0.2989、0.5870、0.1140。 据说这是因为人类对这三种颜色的感知/感受不同。有时也有人
我们的网络应用程序使用 the Vibrate API对于微妙的按钮按下效果: window.navigator.vibrate(5); 但在我的新手机上,感觉不那么微妙,更像是我的手机正试图从我手中
我的应用程序应扫描周围的 Wifi 信号并列出网络名称及其 RSSI。 我在谷歌上找不到任何关于如何做的线索。有人可以举个例子或者至少指出其他地方我可以找到答案吗? 最佳答案 我认为这不可能!不管是
所以我的图像有一些黑点,它们看起来很简单,所以我想我可以创建一个亮度图,将其反转,然后将其应用到我的图像以消除黑点。然而,我所能找到的只有两种均衡方法:均衡整个图像(使用直方图)或将图像分割成深色和浅
我是一名优秀的程序员,十分优秀!