答复: [Google面试题]一道关于图的算法题

是时候公布第一步的参考答案了(用Groovy写的):

def paidback = ['FC':0, 'TM':0, 'P':0, 'Y':0]  
def items = [  
    [ 500+500+15, 'FC', ['FC','TM','P','Y']],  
    [575+330+256, 'TM', ['FC','TM','P','Y']],  
    [        138,  'P', ['FC','TM','P','Y']],  
    [         15, 'TM', ['FC','TM']],  
    [         15,  'P', [ 'P', 'Y']],  
    [         17,  'P', [ 'P','TM']],  
    [         20,  'Y', ['FC', 'Y']],  
    [          3, 'FC', ['FC', 'Y']],  
    [         12,  'P', [ 'P','TM']],  
    [       10+9, 'FC', ['FC', 'Y']],  
    [          9, 'TM', ['TM', 'P']],  
    [         10,  'P', [ 'P', 'Y']],  
    [         10, 'TM', ['FC','TM']],  
    [         12, 'TM', ['TM', 'P']],  
    [         17, 'FC', ['FC', 'Y']]  
]  
def calculatePaidback(namelist, name, payer, amount) {  
    if (namelist.contains(name)) {  
        def n = namelist.join().length()  
        payer == name ? amount * (1 - name.length() / n) : -amount * name.length() / n  
    } else 0  
}  
items.each { item ->  
    paidback.each { pb ->  
        pb.value += calculatePaidback(item[2], pb.key, item[1], item[0])  
    }  
}  
paidback
 

输出结果为:

Result: [FC:230.8333333659, TM:389.8333333713, P:-222.8333333369, Y:-397.8333333326]

跟“利用Excel的公式”计算结果一致(1分钱的误差忽略)

拢共30 LOC,核心计算部分仅为11 LOC -- Groovy有多么的groovy, 由此可见一斑 

 

第二步要解决的问题是:有一个图,带5节点(FC, TM, P, Y四个节点,再加一虚拟节点),四条有向边。如何把该图变形化简?

(图可能有N型,Z型,凹型等,只需给出其中一个即可)

 

To be continued...

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值