问题描述
给定的顶点V,它可以被称为“命题”。
给定的权重:
data W
= Requires -- ^ Denotes that a "proposition" depends on another.
| Invalidates -- ^ Denotes that a "proposition" invalidates another.
在线性序中,如果A要求B,则B必须在A之前,反之,如果A使B无效,则B必须在A之后。
给出了一个加权有向多图(多重图),它最多有2条平行边.其中一个顶点只能要求包含另一个顶点一次,并且只
我必须测量快速排序和合并排序在随机数文件中排序整数所需的时间。
我在网上读到,对于大量的数据,合并排序应该比快速排序更快,但我的测量结果恰恰相反,合并排序所需的时间几乎是快速排序的两倍。
这些算法的实现是我的问题吗?
测量结果:
快速排序:
5 milion int - 715,194,000 ns10 milion int - 1,383,187,400 ns50 milion int - 6,819,586,800 ns100 milion int - 14,159,986,000 ns</code>H 111</code>150 milion int - 22,4
我有一个无向图,完全图,并希望将它转换成一个有向无圈图,在每个节点之间有一个(单向)路径。为了开始,我想添加随机边和停止一旦所有节点连接。需要研究的是一个算法(使用Python,但任何语言都可以)。
因此,例如,这个图不再被进一步连接:
A ---- B A ---> B
\ / => /
\ / v
C C
,但在这种情况下,所有无向边都会变成有向边。
A ---- B A ---> B
\
如果有一组节点N和一组顶点V_1定义具有一定拓扑顺序的图G_1,那么如何检查来自N的节点子集和定义图G_2的新顶点V_2是否保持G_1的拓扑顺序?
例如:
G_1:
D -> E
B -> C
A -> C
G_1:[A, B, C, D, E]的拓扑序
G_2:
D -> B
B -> E
G_2:[D, B, E]的拓扑序
我在考虑某种蛮力方法,生成G_1的所有拓扑顺序,从这些命令中删除在G_2中找不到的节点,并检查是否有任何与G_2的第一个排序相匹配的方法。
我的潜在解决方案正确吗?你有更好的建议吗?
我有一种直觉,原始图的拓扑排序与转置图的dfs相同(反转所有边)
A -> B -> C
D -> B
拓扑排序是D、A、B、C或A、D、B、C
如果我转置图形(反转所有的边)
C -> B -> A
B -> D
dfs还给出了D、A、B、C或A、D、B、C
求求你,我不能从数学上证明/反驳它。如果命题不正确,举一个反例会很有帮助。
我正在Java中快速测试各种排序算法,向它们提供随机生成的数字数组,并且我得到了插入排序的奇怪结果。
我使用System.nanoTime()来度量运行时,插入排序的值低于快速排序和合并排序,即使在排序大型数组时也是如此,这似乎是错误的。我在程序中看到了气泡排序或选择排序的正常(缓慢)运行时间,所以我认为我测量插入的速度不合适,但我不确定如何:
public static int[] insertionSort(int[] array) {
long startTime = System.nanoTime();
int current;
int innerIdx;
我使用的是ms sql server。我有一个像这样的sql:
select ... from
(select ... from ... left join .... where ... order by ... offset 0 rows fetch next 50 rows only) a
left join ...
left join ...
当我将50更改为20或10时,执行速度很慢,当我使用50或100时,执行速度不会那么慢,这可能会导致什么结果?
我比较了sqlplan,两个图没有区别,除了每个节点中的参数(step?)。
另外,我更改了另一个数据库,问题
我正在寻找一种算法,它可以对一个图进行拓扑排序,从而生成一组列表,每个列表包含一个不相交子图的拓扑排序顶点。
当节点依赖于两个不同列表中的节点时,困难的部分是合并列表。
这是我的不完整代码/伪代码,其中图是一个dict {node: [node, node, ...]}
拓扑排序图为不相交列表
sorted_subgraphs = []
while graph:
cyclic = True
for node, edges in list(graph.items()):
for edge in edges:
if edge in grap
给定一个图和一个数n,是否有算法通过删除n边来分割图,以最小化最长路径/直径的长度?
例如,如果我有以下图表:
A - B - C - D
\ E - F
而n= 2,您会想要在以下两个之间切分图:
B和C
B和E
因此,任何路径都不会超过2。如果该图是一个树/无圈无向图,这是否也会产生影响?
EDIT1:由树/无环无向图改变的重组图
我有一个函数,它可以接受两个元素并按升序返回它们:
void Sort2(int &a, int &b) {
if (a < b) return;
int t = a;
a = b;
b = t;
}
--如果不允许使用额外的条件运算符,使用这个函数对数组进行排序的最快方法是什么?,这意味着我的整个程序应该如下所示:
int main(){
int a[N];
// fill a array
const int NS = ...; // number of comparison, depending on N.
const
module Main where
import Test.QuickCheck
import Data.Set as Set
data Edge v = Edge {source :: v, target :: v}
deriving (Show,Eq,Ord)
data Graph v = Graph {nodes :: Set v, edges :: Set (Edge v)}
deriving Show
instance Arbitrary v => Int-> Arbitrary (Edge