我想在流量网络G中的所有最小切割中找到 积分容量,包含最小数量的边缘。我们怎么样 修改G的容量以创建一个新的流量网络G',其中任何最小值 切入G'是G中最小边数的最小切割。 来源 - Cormen
答案 0 :(得分:2)
让我们说图G
有n
个顶点。
我们在e'
中定义弧G'
的容量,其对应e
中G
的弧c(e') = c(e) * n + 1
为G'
。
因此,n
中的切割值恰好是G
中切割值+切割边缘数量的G'
倍。
让我们说现在我们的n * x + a
最小值为G
。这意味着G
中的切割值为x。如果y < x
中的切割值较小n * y + b <= n * (y+1) <= n * x < n * x + a
,则此切割的值为n * x + a
,这与值为G'
的切割相矛盾是G'
中的最小值。我们刚刚证明G
中的每个最小切割也是G'
中的最小切割。但接下来,G
中的最小值减少是G
中的最小值,并且#!/usr/bin/env ruby
require 'csv'
@dictionary_data = CSV.open('dict_data.csv') { |csv|
Hash[csv.map { |name, tag| [name[/^.+(?=-\w+$)/], tag] }]
}
@app_data = [{'name' => 'server_name1.sub.emea', 'tag' => 'Europe', 'state' => 'Online'},
{'name' => 'server_name2.sub.us', 'tag' => 'US E.', 'state' => 'Online'},
{'name' => 'server_name3.sub.us', 'tag' => 'US W.', 'state' => 'Failover'}]
STATE_MAP = {
'Online' => 'Up',
'Failover' => 'F.O.'
}
@app_data = @app_data.map do |server|
name = server['name'][/^[^.]+/]
{
'name' => name,
'tag' => @dictionary_data[name],
'state' => STATE_MAP[server['state']],
}
end
p @app_data
# => [{"name"=>"server_name1", "tag"=>"Paris, France", "state"=>"Up"},
# {"name"=>"server_name2", "tag"=>"New York, USA", "state"=>"Up"},
# {"name"=>"server_name3", "tag"=>"Portland, USA", "state"=>"F.O."}]
中所有最小值的最小边数都为最小值。