- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有一组带有{(a_i,b_i) with i = 1, ..., n}
的段0 <= a_i < b_i <= 1
,必须将其布置在N行[0,1]
上,且不得重叠。
例如,如果一组可以由{(0.35,0.41), (0.40,0.43), (0.47,0.88)}
和N >= 2
组成,则可以排列这些段而不会重叠。使用N = 1
是不可能的,因为第一段和第二段重叠。
在必须将段放置在哪一行上没有任何限制的情况下,一种可能的算法如下:根据段的起始位置a_i
对段进行排序,然后将它们一个接一个地放置在N
的一行上。如果无法将段a_i
放置在任何行上而不与任何已放置的段重叠,则意味着没有解决方案。
如果某些线段在必须放置的线上有约束,该怎么办?例如,段(a_2,b_2)
可以仅放在第三行,并将其写为(a_2,b_2;3)
。
一种可能的情况如下:{(0.45,0.56;-), (0.48,0.67;-), (0.66,0.70;2), (0.68,0.71;-)}
和N = 2
。
如果将第一段放在第一行上,则第二段必须在第二行上,而第三段不能满足约束条件。相反,如果将第一段放在第二行上,则第二段在第一行上,第二段在第三行上满足约束,而最后一条在第一行上。
我尝试过的
{1,2}x{1,2}x{2}x{1,2}
在第一个没有重叠的地方之后,程序将返回组合,这是该问题的解决方案。当然可以,当然很慢。 [0,1]
,标记至少是一个线段边界的点。建立一个由两个连续点组成的间隔的列表I
。对于I
的每个元素,获取覆盖它的各段的列表S
。对于S'
的每个子集S
,build设置的A'
等于它们允许使用的行号的并集。例如S' = {(0.5,0.6;1,2), (0.4,0.7;2)}
,A' = {1, 2}
。如果A'
的基数小于S'
的基数,则没有解决方案。不幸的是,情况并非总是如此。 2.
中的每个间隔,并删除段无法放置的行。例如,如果线段被约束在第2行上,则这是任何其他与其相交的线段的选择。继续扫描间隔列表,直到不再有减少的可能性为止。然后将1.
中的基本算法与可能的组合子集结合使用。 A
的方阵n
(n
为段数)。如果a_ij
重叠,则等于1
;如果不重叠,则等于0
。根据段是否具有约束,仅允许对矩阵执行特定操作(如果交换两行,则必须交换相同的列,具有约束的段不能任意交换)。如果可以得到一个矩阵,矩阵中有许多对角线块<= N
,它们就是单位矩阵,那么就可以找到解决方案。不知道这是否可行,也没有道理。 I
中定义的S
,S'
,A'
和2.
。如果A'
的基数小于S'
的基数,则中止(无解决方案)。如果A'
的基数等于S'
的基数,请从与A'
的每个元素相交的段中删除S'
的行号。I
,直到无法再还原为止。 是真的吗,如果程序到现在还没有中止,那么剩下的所有可能的解决方案都可以解决这个问题? (是,但不仅限于此)N = 3
,S = {(0.5,0.6;1,2), (0.4,0.7;2), (0.5,0.6;1,2,3)}
。子集之一是S' = {(0.5,0.6;1,2), (0.4,0.7;2)}
,其子集具有A' = {1,2}
。 S'
的基数等于A'
的基数,因此必须从每个不在{1,2}
中的段允许的行中删除S'
。一个获得S = {(0.5,0.6;1,2), (0.4,0.7;2), (0.5,0.6;3)}
。对S' = {(0.4,0.7;2)}
进行相同的操作,从第一段中删除2
,然后获得S = {(0.5,0.6;1), (0.4,0.7;2), (0.5,0.6;3)}
,这是(唯一可能的)解决方案。N = 2
和{(0.5,0.6;-), (0.55,0.7;-), (0.65,0.8;-)}
,并非{1,2}x{1,2}x{1,2}
中的每个组合都是解决方案。原因与(真)解的对称性有关。如果在算法的每一次完整运行之后,将某段固定在其允许的一条直线上(从而破坏了对称性)并重新运行该算法,则可以为该提议的集合获得一种解决方案。5.
是正确的,是否可以根据n
段的解来计算n-1
段的解? x
没有被任何线段覆盖,则可以将问题分为2个问题,即线
[0,x]
和
[x,1]
长,并且有两组不同的线段。因此,必须假定
[0,1]
中的每个点都至少被一个段覆盖。
最佳答案
我认为这个问题可以翻译成Vertex Coloring:
让每个线段都是无向图中的一个顶点。如果相应的线段重叠,则两个顶点之间将有一条边。因此,我们需要为每个顶点(段)分配一种颜色(线号),以使没有两个相邻的顶点具有相同的颜色(两个段不在同一条线上重叠)。
具有约束的变化可以描述为List Coloring。
关于algorithm - 在行中排列段而不重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961662/
我需要在给定的列表上生成排列。我设法这样做 let rec Permute (final, arr) = if List.length arr > 0 then for x i
我正在尝试运行我的代码,以便它打印循环排列,尽管我目前只能让它执行第一个排列。它正确运行到我标记的点,但我看不出出了什么问题。我认为 while 循环中没有中断,但我不确定。确实需要一些帮助。 pac
我正在尝试计算不包含连续字母的排列数。我的代码通过了像“aabb”(答案:8)和“aab”(答案:2)这样的测试,但没有通过像“abcdefa”这样的情况(我的答案:2520;正确答案:3600)。这
我正在尝试使用 dplyr 的 arrange 根据条件对字符串进行排序。我想在一列上排列,但如果第二列等于一个值,则按升序排列,如果第二列等于另一个值,则按降序排列。 我发现了几个类似的问题(其中一
在 R 中,我使用 dplyr更具体地说 arrange() . 不知何故 arrange功能没有按预期工作。 在下面的示例中,我首先存储列的名称,然后将此变量作为参数传递给名为“my_functio
以下是我的 main.qml : Window { id: window visible: true width: 800 height: 480 title:
很难用谷歌搜索这个问题,因为我不确定这些概念叫什么,并且所有“两个数组/组的组合”SO 帖子都没有给我我期望的输出。 数组示例: var array1 = ['Bob', 'Tina']; var a
实现以下目标的最佳方法是什么?我有两个列表: val l1 = List("a", "b") val l2 = List(1, 2) 我想生成这个: List ( List(('a', 1)
我知道互联网上有很多针对我的具体问题的解决方案,但我一直在尝试以特定的方式解决它,但它不起作用,我真的无法理解出了什么问题。就我而言,我只想打印排列。这是我的代码: a = "abc"; functi
我有这样的代码来创建排列: --unique permutation perm :: [t] -> [[t]] perm [] = [[]] perm (x:xs) = [(y:zs) | (y,ys
有没有比使用基本公式 n!/(n-r)! 更好的方法?就像我们对 nCr(组合) nCr = (n-l)Cr + (n-1)C(r-1) 一样? 最佳答案 这样怎么样:nPr = (n−1)Pr +
此问答的动机是 How to build permutation with some conditions in R . 到目前为止,已经有一些很好的 R 软件包,例如 RcppAlgos 和 arr
我正在修改一本书中的排列示例。以下代码按预期工作。 perms([]) -> [[]]; perms(L) -> [[H|T] || H []; 它返回一个空列表。当我替换时,我得到了这个。
大约一周前,我问了一个关于帮助我解决这个问题的问题 Java permutations ,打印排列方法有问题。我已经整理了我的代码,并有一个现在可以工作的工作示例,尽管如果 5 位于数组中的第五个位置
我有一个包含重复元素的列表,即orig = [1,1,1,2,2,3]。 我想创建一个derangement b = f(orig),使得 b 中的每个位置值都与 orig 中的值不同: b[i] !
我想生成一个 array a 的排列而且我不想使用实用功能,例如 java.util.Collections() . 排列应该是随机的,并且每个排列都应该有可能发生 - 但不需要均等分布的概率。 以下
我有一个作业:用户输入一个字符串,例如 ABCD,程序必须给出所有排列。我不希望整个代码只是一个提示。这是我到目前为止在他们那里得到的,我没有得到任何实现。 以ABCD为例: 在本例中获取字符串长度的
我目前正在编写一个使用 itertools 的程序,其中的一部分似乎无法正常运行。我希望确定排列函数输出列表长度的输入等于它生成输出的列表长度。换句话说,我有 import itertools b =
我有一个列表 x=[1,2,3,4,5] 并且想查看这个列表的不同排列,一次取两个数字。 x=[1,2,3,4,5] from itertools import permutations y=list
我正在寻找 C 或 Python 代码来实现两个伪代码函数之一: function 1: list1 = [0,1,2] #any list of single-integer elements li
我是一名优秀的程序员,十分优秀!