- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找一个算法,它成功地将下面的问题推广到n个集合,但是为了简单起见,假设有4个不同的集合,每个集合包含4个元素。我们还可以假设每个集合总是包含相同数量的元素,但是可以有任意数量的元素。所以如果第一个集合中有37个元素,我们可以假设其他集合中也有37个元素。
元素的组合是从第一个集合中取一个元素放在第一位,从第二个集合中取一个元素放在第二位,以此类推。例如,第一组包含{a0,a1,a2,a3},第二组包含{b0,b1,b2,b3},第三组是{c0,c1,c2,c3},第四组是{d0,d1,d2,d3}。一种可能的组合是[a0,b2,c1,d3]。
我们的目标是找到路径最大化的距离时,循环通过所有可能的组合,避免重复尽可能多。避免重复适用于相邻的组和单个列。例如:
单个列
[a0,b0,c0,d0]
[A1、B1、C1、D1]
[A2、B0、C2、D2]
这是不正确的,因为b0的重复比必须的要快。
邻接群
[a0,b0,c0,d0]
[A1、B1、C1、D1]
[A2、B2、C2、D2]
[A3、B3、C3、D3]
[a0、b0、c1、d2]
这是不正确的,因为相邻对(a0,b0)重复得比必须重复得快。但是如果最后一个是[a0,b1,c0,d1],那么这就可以了。
当循环通过所有可能的组合时,必须重复相邻的组,但目标是最大化它们之间的距离。例如,如果使用(a0,b0),那么理想情况下,在再次使用之前,将使用所有其他第一对。
当有3个集合时,我能找到一个解,但是我很难将它推广到n个集合,甚至不能求解4个集合。有什么想法吗?
你能把你的三套解决方案贴出来吗?
当然,首先我写下所有可能的组合。然后,我通过将非连续(第一个和第三个)元素重复的条目分组,生成了三个3x3的条目矩阵:
(A0,B0,C0)1, (A1,B0,C1)4, (A2,B0,C2)7 (A0,B0,C1)13, (A1,B0,C2)16, (A2,B0,C0)10 (A0,B0,C2)25, (A1,B0,C0)19, (A2,B0,C1)22
(A0,B1,C0)8, (A1,B1,C1)2, (A2,B1,C2)5 (A0,B1,C1)11, (A1,B1,C2)14, (A2,B1,C0)17 (A0,B1,C2)23, (A1,B1,C0)26, (A2,B1,C1)20
(A0,B2,C0)6, (A1,B2,C1)9, (A2,B2,C2)3 (A0,B2,C1)18, (A1,B2,C2)12, (A2,B2,C0)15 (A0,B2,C2)21, (A1,B2,C0)24, (A2,B2,C1)27
Then I realized if I traversed in a diagonal pattern (order indicated by the superscript index) that it would obey the rules. I then wrote the following code to take advantage of this visual pattern:
@Test
public void run() {
List<String> A = new ArrayList<String>();
A.add("0");
A.add("1");
A.add("2");
List<String> B = new ArrayList<String>();
B.add("0");
B.add("1");
B.add("2");
List<String> C = new ArrayList<String>();
C.add("0");
C.add("1");
C.add("2");
int numElements = A.size();
List<String> output = new ArrayList<String>();
int offset = 0;
int nextOffset = 0;
for (int i = 0; i < A.size()*B.size()*C.size(); i++) {
int j = i % numElements;
int k = i / numElements;
if (j == 0 && k%numElements == numElements-1) {
nextOffset = (j+k+offset) % numElements;
}
if (j == 0 && k%numElements == 0) {
offset = nextOffset;
}
String first = A.get((j+k+offset) % numElements);
String second = B.get(j);
String third = C.get((j+k) % numElements);
System.out.println(first + " " + second + " " + third);
output.add(first + second + third);
}
}
if (k % numElements == 0) continue;
最佳答案
即使你的问题做了修改,我还是不确定你到底想要什么。看来你真正想要的是不可能的,但我不确定在这种条件下究竟有多少放松是可以接受的。不过,我还是要试一试。
奇怪的是,似乎很少有文献(无论如何,我都能找到)涉及到你的问题,所以我不得不自己发明一些东西。这是一个想法:你正在寻找一个多维环面上的点序列,使得序列中的元素在一个复杂的度量中尽可能远离。这让我想起了几年前在力学课上学到的东西,奇怪的是。如果你有一条直线在一个具有有理斜率的平面环面上,那么这条直线会在几个周期后回到自身,但是如果你有一条具有有理斜率的直线,那么这条直线将密集地覆盖整个环面。
我不认为这对很多人意味着什么,但它确实给了我一个主意。每一组的索引可能会有一个不合理的数量。当然,你必须先发言,然后再进行模块化,但可以说,它似乎很好地覆盖了基础。每个集合的非理性步骤可能是不同的(使用相当松散的语言来说,是相互非理性的)。
为了使这个想法更精确,我写了一个简短的程序。请检查一下。
class Equidistributed {
static final double IRRATIONAL1 = Math.sqrt(2);
static final double IRRATIONAL2 = Math.sqrt(3);
static final double IRRATIONAL3 = Math.sqrt(5)-1;
// four sets of 7 elements each
static int setSize = 7;
public static void main(String[] args) {
for (int i = 0; i < Math.pow(setSize,4); i++) {
String tuple = "";
int j = i % setSize;
tuple += j + ",";
j = ((int)Math.floor(i*IRRATIONAL1)) % setSize;
tuple += j + ",";
j = ((int)Math.floor(i*IRRATIONAL2)) % setSize;
tuple += j + ",";
j = ((int)Math.floor(i*IRRATIONAL3)) % setSize;
tuple += j;
System.out.println(tuple);
}
}
}
(i, floor(i*irrational1), floor(i*irrational2), floor(i*irrational3)) mod 7
关于algorithm - 最大化选取元素与集合的距离(避免重复)的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30633817/
给定一个包含 n 个非负整数的数组:A1、A2、...、AN。如何找到一对整数 Au, Av (1 ≤ u ans) { ans=arr[i] & arr[j
有人知道这段代码的正确解决方案吗? BOOL maximized = [myWindow isMaximized]; 最佳答案 也许看看 isZoomed 关于cocoa - NSWindow 最大化
当前有一个 MySQL 数据库,但遇到 MySQL 以 600% CPU 使用率运行的问题。 规范: 2.3 GHz Intel Xeon® E5-2686 v4 (Broadwell) 处理器或 2
我已将 Skype 配置为在 Windows 启动时最小化启动。 现在我需要通过全屏应用程序按钮中的一个按钮将 Skype 置于最前面。我有这段代码: For Each p As Proces
我已经有一段时间没有做任何生疏的程序了。我正在研究代码以最大化和最小化其他应用程序。所以我找到了一些基本的东西,这就是我所拥有的,对原来的东西稍作修改。它希望我生成一些我所做的 FindWindow
我有一个 Windows CE 应用程序,它记录移动设备的击键。有一个用于初始化录制功能的按钮,它通过调用强制主窗口最小化: ShowWindow (hWnd, SW_MINIMIZE); 在最小化窗
我想显示一个占据尽可能多屏幕空间的对话框。 所以,这是一个示例: AlertDialog dialog = new AlertDialog.Builder(ctx)......create(); Wi
对Wndows用户来说,最小化/最大化/关闭按钮放在系统窗口的右上角是肯定的。而大多数朋友都是成为Wndows用户之后才成为Ubuntu用户的,因此Ubuntu程序窗口中将这些按键放在左上角使用起来
1.Ctrl+Alt+T调出终端 2.首先安装gconf-editor: sudo apt-get install gconf-editor 会提示叫你安装 gconf-editor 安装完成
Width最大化窗口时,屏幕的属性似乎没有更新到完全最大化的宽度。如果我调整它的大小,一切正常,但在最大化时就不行。 我的代码如下: private void Window_SizeChanged(o
我正在这个 fiddle 中使用指令和 = 绑定(bind)。我收到以下错误: Uncaught Error: 10 $digest() iterations reached. Aborting! W
是否有任何快捷方式可以最大化您在 Eclipse 中使用的选项卡?假设我正在处理代码的一部分,并且我想最大化选项卡而不是使用鼠标双击它,有人知道一种方法吗? 最佳答案 CtrlM 将最大化/恢复编辑器
在 Glassdoor 评论中遇到这个问题,觉得很有趣。 Given an integer consisting of 4 digits, we need to maximize it in 24 h
在 VB6 中,我创建了一个带有一些文本框、列表框和命令按钮的表单。我使用类似 的方法设置所有这些控件的 X-Y 位置 control2.Top = form.Height * 0.50 'set
到处都有人告诉我使用这个: frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 但问题是我的 JMenuBar 时断时续地消失(发生在我身上的奇怪错误),并且
我有一个 JDesktopPane 和一个 JInternalFrame。我希望 JInternalFrame 在创建后自动最大化。如何对“最大化窗口”事件进行硬编码? 最佳答案 使用JInterna
这个问题已经有答案了: JFrame doesn't take the actual screen size (2 个回答) 已关闭 3 年前。 我想最大化我的 JFrame,就像按下“关闭”旁边的按
我正在使用 vim 和 python 编程,并使用 tpope's vim-dispatch通过运行当前文件 :Dispatch python main.py 程序的打印输出被定向到quickfix窗
假设我们有一个名为 total 的 NSDecimal 常量,它包含 3.33333333 除以 10/3 的值。 10 和 3 都是NSDecimalNumber。我们希望 Swift 中的 NSD
有谁知道如何在发生特定操作后最大化 JFrame?我将在下面发布我的代码,我是一个不评论我的代码的恶魔(我会在某个时候这样做)但它应该是相当 self 解释的。我试图做的是在从菜单中选择选项后使框架最
我是一名优秀的程序员,十分优秀!