最近学操作系统信号量机制,没事干儿,自己想出来了一个算法题,但是不会解。等哪天解出来了就把代码放到里面,然后改掉名字。
Posted 九死九歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近学操作系统信号量机制,没事干儿,自己想出来了一个算法题,但是不会解。等哪天解出来了就把代码放到里面,然后改掉名字。相关的知识,希望对你有一定的参考价值。
输入:
一个无环有向图的对接矩阵。假设该矩阵尺寸为n × n
输出:
一个长度为n的Thread数组。保证这n个线程的run方法内部都会通过Thread.currentThread().getName()
输出一遍自己的线程名。并且输出的顺序要满足有向图中的前驱关系。run方法中的其它代码可以任意顺序执行。
假设这个算法的名称是func(),表示有向图的对接矩阵是matrix,那么main函数中的内容是:
public static Thread[] func(boolean[][] matrix) {
/* code*/
}
public static void main(String[] args) {
Thread[] threads = func(matrix);
for (Thread t : threads) {
t.start();
}
}
样例:
输入样例1:
(
0
1
1
0
0
0
0
0
0
)
\\left( \\begin{matrix} 0 & 1 & 1 \\\\ 0 & 0 & 0 \\\\ 0 & 0 & 0 \\end{matrix} \\right)
⎝⎛000100100⎠⎞
输出样例1:
Thread-0
Thread-1
Thread-2
输入样例2:
(
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
)
\\left( \\begin{matrix} 0 & 0 & 1 & 1 & 1 & 0 & 0\\\\ 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\ 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\ 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\ 0 & 0 & 0 & 0 & 0 & 1 & 1\\\\ 0 & 0 & 0 & 0 & 0 & 0 & 1\\\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 \\end{matrix} \\right)
⎝⎜⎜⎜⎜⎜⎜⎜⎜⎛0000000000000011000001000000100000000001000000110⎠⎟⎟⎟⎟⎟⎟⎟⎟⎞
输出样例2:
Thread-0
Thread-4
Thread-1
Thread-3
Thread-2
Thread-5
Thread-6
Thread-1
Thread-0
Thread-2
Thread-4
Thread-5
Thread-6
Thread-3
由于多线程的异步性,main函数的输出结果可以有多种,但是必须满足有向图所表示的前驱关系,这就得保证返回的Thread的数组只能有一种输出结果了。
如果在检验算法结果的时候发现像输入样例2这样明明可以又输出运行结果的输入样例多次运行后只有一种输出结果,那说明肯定是把多线程算法当成单线程算法来做了,不给予通过。
代码实现:
public class Solution {
public static Thread[] func(boolean[][] matrix) {
System.out.println("目前还不会写😭😭😭");
return null;
}
}
以上是关于最近学操作系统信号量机制,没事干儿,自己想出来了一个算法题,但是不会解。等哪天解出来了就把代码放到里面,然后改掉名字。的主要内容,如果未能解决你的问题,请参考以下文章