小编din*_*dum的帖子

如何使用最大流量算法在图表上找到最小割数?

我需要在图表上找到最小切割.我一直在阅读关于流网络的内容,但我能找到的是最大流算法,如Ford-Fulkerson,push-relabel等.鉴于最大流量最小切割定理,是否可以使用其中一种算法来查找使用最大流算法在图表上的最小割数?怎么样?

到目前为止我发现的最好的信息是,如果我发现"饱和"边缘,即流量等于容量的边缘,那些边缘对应于最小切割.真的吗?这对我来说听起来不是100%.确实,最小切口上的所有边缘都将饱和,但我相信也可能存在饱和边缘,这些边缘超出最小切割"路径".

cut flow graph-theory minimum max-flow

56
推荐指数
3
解决办法
6万
查看次数

for-loop的简写 - C++中的句法糖(11)

实际上这些是两个相关的问题.

我知道C++ 11中有一种新的语法,用于for表单的基于范围的循环:

//v is some container
for (auto &i: v){
   // Do something with i
}
Run Code Online (Sandbox Code Playgroud)

第一个问题:我怎样才能推断出我在这个循环中的迭代次数?(假设我想在位置j处填充值为j的向量).

第二个问题:我想知道是否还有其他方法来编写表单的循环

for (int i=0; i<100; i++) { ... }
Run Code Online (Sandbox Code Playgroud)

我发现这种编写方式有点麻烦,我经常这样做,我希望有一个更简洁的语法.一些事情:

for(i in [0..99]){ ... }
Run Code Online (Sandbox Code Playgroud)

会很好.

对于这两个问题,我希望避免使用其他库.

c++ syntax for-loop syntactic-sugar c++11

18
推荐指数
3
解决办法
2万
查看次数

Boolean.FALSE或new Boolean(false)?

我在布尔类的源代码中看到了以下内容:

public static final Boolean FALSE = new Boolean(false);
Run Code Online (Sandbox Code Playgroud)

因此,如果我理解正确的领域FALSEBoolean类是Boolean本身有其boolean字段设置为false.

现在我想知道以下两个陈述是否真的相同.

Boolean myBool = new Boolean(false);
Run Code Online (Sandbox Code Playgroud)

Boolean myBool = Boolean.FALSE;
Run Code Online (Sandbox Code Playgroud)

我假设在第一种情况下构造一个新的Boolean对象并且myBool引用指向它,而在第二种情况下,我们实际上复制了对Boolean.FALSE对象的引用 - 这是正确的吗?

如果是这样,这种差异究竟意味着什么?

最后但并非最不重要的实际问题:我应该选择哪两个选项以及为什么?

java boolean coding-style

9
推荐指数
2
解决办法
8853
查看次数

检查输入是否为有效的二叉树(使用联合查找)

给定以(A,B)形式的多个元组,其中A是二叉树中的父级,B是子级,请查找输入是否有效。提供了4个错误条件:

  1. 如果父母有两个以上的孩子,
  2. 如果输入了重复的元组,
  3. 如果树有周期,
  4. 如果可能有多个根。

如果违反多个有效条件,请按上述顺序打印条件。如果输入有效,则以串行表示形式打印树。例如:如果输入是(A,B),(B,C),(A,D),(C,E),则输出:(A(B(C(E())))(D))

我正在考虑通过联合查找数据结构来解决它,但无法对其进行编码。谁能帮助我了解c / c ++中的逻辑或伪代码

binary-tree graph union-find

6
推荐指数
0
解决办法
634
查看次数

数据库中有一个大表还是许多小表?

假设我想使用像postgresql这样的db创建一个典型的todo-webApp.用户应该能够创建待办事项列表.在这个列表中,他应该能够制作实际的todo条目.

我认为todo-list是一个具有不同属性的对象,如所有者,名称等,当然还有实际的todo-entries,它们有自己的属性,如content,priority,date .......

我的想法是为所有用户的所有待办事项列表创建一个表.在此表中,我将存储每个列表的所有属性.但出现的问题是如何存储todo条目本身?当然在附加表中,但我应该宁愿:

1.为所有条目创建一个大表,并有一个字段存储它们所属的待办事项列表的id,如下所示:

todo-list: id, owner, ...
todo-entries: list.id, content, ...
Run Code Online (Sandbox Code Playgroud)

这将总共给出2个表.todo-entries表可能变得非常大.虽然我们知道条目到期,但是表格只会随着使用量的增加而增长但不会随着时间的推移而增长.然后,我们会写东西喜欢SELECT * FROM todo-entries WHERE todo-list-id=id在那里id是我们试图检索列表.

要么

2.基于每个用户创建todo-entries表.

todo-list: id, owner, ...
todo-entries-owner: list.id, content,. ..
Run Code Online (Sandbox Code Playgroud)

条目数表取决于系统中的用户数.有点像SELECT * FROM todo-entries-owner.中型表格取决于用户总共输入的条目数.

要么

3. 为每个待办事项列表创建一个todo-entries-table,然后将生成的表名存储在表的字段中.例如,我们可以在表名中使用todos-list唯一ID,如:

todo-list: id, owner, entries-list-name, ...    
todo-entries-id: content, ... //the id part is the id from the todo-list id field. 
Run Code Online (Sandbox Code Playgroud)

在第三种情况下,我们可能会有相当多的表.用户可能会创建许多"短"待办事项列表.要检索列表中,我们会那么只需沿着线去SELECT * FROM todo-entries-id那里todo-entries-id应该是在待办事项列表的字段,也可能隐含通过连接"待办事项条目"与待办事项列表的唯一ID来完成.顺便说一句:我该怎么做,如果这样做js或者可以直接在PostgreSQL中完成?与此非常相关:在SELECT * FROM <tablename>声明中,是否可以将某些其他表的某些字段的值作为 …

database postgresql database-design

2
推荐指数
1
解决办法
1901
查看次数

将一个字符替换为另一个字符,反之亦然

我想用反斜杠'\'替换所有斜杠'/',反之亦然.

我天真的解决方案就是这样做,tr但我需要一个占位符字符,我认为它不是很漂亮:

tr '/' '¢' | tr '\\' '/' | tr '¢' '\\'
Run Code Online (Sandbox Code Playgroud)

这也只有在我的输入中从未出现'¢'时才有效,在我的情况下,这很可能就足够了 - 但嘿,谁知道呢?当然,通过使用sed然后用一些任意随机的字符串替换'¢' 就可以很容易地采用同样的想法并使其更加健壮- 比如'½|#&¬_$'或其他东西.

但我想知道是否有一些单一的bash命令来实现这一目标,这将使这个东西变得更短,更具可读性和更强大.也许sed可以开箱即用吗?


虽然我们在这,但这个操作的正确名称是什么?像'双向替换'.如果我知道我的谷歌搜索可能会更有成效.我也试过'交换字符',但我只找到定期更换的东西.

string bash replace sed tr

2
推荐指数
1
解决办法
484
查看次数

计数排序:为什么我们需要以前的计数之和?

我正在阅读有关计数排序的算法,其中一个步骤是

计数排序

for(i = 1 to k) 
   c[i] = c[i]+c[i-1];
Run Code Online (Sandbox Code Playgroud)

为什么我们需要这一步?

为什么我们不能使用它

for(i = 0 to k)
    while(c[i]--)
        Output i/Use i as key.
Run Code Online (Sandbox Code Playgroud)

我想到的一个问题是,我们是否需要数据本身(可能就像引用特定索引的字符串一样)。

但是之后,我们可以使用2D向量。在这种方法中,我们将数据从0到99进行排序有什么不好的地方。

int a[100];
for(int i = 0 ; i < 100; ++i)
    a[i] = 0;
string s;
vector<vector<string>> data(100);
int temp;
for(int i = 0 ; i < n ; ++i){
    cin>>temp;
    a[temp]++;
    getline(cin,s);
    data[temp].push_back(s);
}

for(int i = 0 ; i < 100; ++i){
    int current = 0;
    while(a[i]--){
        cout<<data[i][current]<<" ";
        ++current;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ sorting counting-sort

1
推荐指数
1
解决办法
889
查看次数

在最多包含两条红色边的图中找到最短路径

问题是 : 在此处输入图片说明

我知道我们应该将图形复制到 G1 和 G2 中,并且可能使用 Dijstra 的算法。我不确定我应该如何以一种方式连接 G1 和 G2,以便为这个问题找到正确的解决方案。

algorithm graph-theory dijkstra

1
推荐指数
1
解决办法
1007
查看次数