我已经尝试破解这个好几天了,任何帮助都将不胜感激。基本上我试图遍历这个目的地配对数组,看看是否可以通过重新计算每个“倒置”配对的里程来改善总距离。如果倒置对的总里程比原来的要好,我用它们的倒置版本替换原来的对。
我发现的问题是我要么内存不足,要么让这个进程继续运行,或者结果没有按照我期望的方式优化(我获得了里程)。
我很感激,我在这里有点粗略,但我不确定我哪里出错了。把它变成一个建设性的问题:任何人都可以帮助在 JavaScript 中创建一个函数/算法,它可以遍历一组配对并对其进行优化吗?...请?
var firstResult = [{"from":"DE55 7RA","to":"DE55 4XJ","oNum":"3740003654","dNum":"3650645273","metres":"536"},{"from":"WF2 0XF","to":"WF2 0XE","oNum":"3740003632","dNum":"3650645256","metres":"304"},{"from":"WF9 2RH","to":"WF9 3AP","oNum":"3740003657","dNum":"3650645279","metres":"4132"},{"from":"LS10 1BG","to":"LS9 8HY","oNum":"3740003637","dNum":"3650645266","metres":"2941"},{"from":"WF10 5UA","to":"WF8 4QD","oNum":"3740003646","dNum":13,"metres":"7248"},{"from":"HD2 1UA","to":"WF15 6JL","oNum":"3740003641","dNum":"3650645270","metres":"6745"},{"from":"HU14 3HJ","to":"HU15 2PE","oNum":"3740003640","dNum":"3650645259","metres":"13309"},{"from":"WF2 0XF","to":"WF5 8NE","oNum":"3740003631","dNum":"3650645262","metres":"9862"},{"from":"WF9 2XX","to":"WF8 4QD","oNum":"3740003656","dNum":83,"metres":"13705"},{"from":"WF9 2XX","to":"WF8 4QD","oNum":"3740003647","dNum":67,"metres":"13705"},{"from":"WF9 2XR","to":"WF8 4QD","oNum":"3740003636","dNum":59,"metres":"13545"},{"from":"DN14 6XL","to":"DN14 0SB","oNum":"3740003642","dNum":"3650645268","metres":"20763"},{"from":"NG16 4HY","to":"NG15 0DR","oNum":"3740003635","dNum":"3650645258","metres":"13165"},{"from":"DN6 7FB","to":"S73 0UN","oNum":"3740003639","dNum":"3650645255","metres":"18835"},{"from":"LS25 6JH","to":"WF6 1GX","oNum":"3740003652","dNum":"3650645253","metres":"22861"},{"from":"DN3 3FF","to":"DN9 1LB","oNum":"3740003660","dNum":"3650645264","metres":"21343"},{"from":"DN6 7FB","to":"S71 3HQ","oNum":"3740003638","dNum":"3650645278","metres":"19268"},{"from":"S43 4UX","to":"S6 1LY","oNum":"3740003633","dNum":"3650645276","metres":"30365"},{"from":"S43 4UX","to":"S6 1LY","oNum":"3740003651","dNum":"3650645275","metres":"30365"},{"from":"DN14 6XL","to":"HU3 4UW","oNum":"3740003667","dNum":"3650645277","metres":"41502"},{"from":"LS25 6JH","to":"LS7 1PZ","oNum":"3740003653","dNum":"3650645274","metres":"25194"},{"from":"LS25 6JH","to":"BD4 0SG","oNum":"3740003658","dNum":"3650645269","metres":"43788"},{"from":"DN14 6XL","to":"HU7 0XS","oNum":"3740003648","dNum":"3650645265","metres":"49066"},{"from":"NG90 1BS","to":"DE6 1EX","oNum":"3740003643","dNum":"3650645261","metres":"44283"},{"from":"S80 3YY","to":"HD6 1LJ","oNum":"3740003665","dNum":"3650645260","metres":"80026"},{"from":"S80 2RZ","to":"BD8 9HQ","oNum":"3740003634","dNum":"3650645263","metres":"95649"},{"from":"NG90 1BS","to":"HU7 0YW","oNum":"3740003650","dNum":"3650645272","metres":"156190"},{"from":"NG90 1BS","to":"HU12 8TB","oNum":"3740003644","dNum":"3650645267","metres":"160285"},{"from":"NG90 1BS","to":"YO17 6YA","oNum":"3740003645","dNum":"3650645257","metres":"172388"},{"from":"NG90 1BS","to":"YO17 9HG","oNum":"3740003649","dNum":"3650645271","metres":"176868"}],
fs = require('fs'),
_ = require('underscore'),
mongoose = require('mongoose'),
Schema = mongoose.Schema,
logPostals = fs.createWriteStream('postals.txt', {'flags' : 'w'}),
db = mongoose.connect('mongodb://localhost/legs');
var Leg = new Schema({
from: {
type: String,
validate: /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i,
trim: true
},
to: {
type: String,
validate: /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i,
trim: true
},
time: Number,
distance: Number
})
var legModel = mongoose.model('Leg', Leg);
var legIndex = 0, armIndex= 0 , inverted = 0, original = 0;
var goCompare = function(){
_.each(firstResult , function(leg){
_.each(firstResult , function(arm){
if(leg.from !== arm.from){
legModel.find({
from: leg.from,
to: arm.to
}, function(err, data) {
if (data.length > 0) {
legModel.find({
from: arm.from,
to : leg.to
},function(e,d){
inverted = data[0].distance + d[0].distance;
original = (leg.metres*1) + (arm.metres*1) ;
if( original > inverted ){
legIndex = firstResult.indexOf(leg);
armIndex = firstResult.indexOf(arm);
firstResult[legIndex] ={
from : leg.from,
to : arm.to,
metres : data[0].distance,
oNum : leg.oNum,
dNum : arm.dNum
};
firstResult[armIndex] = {
from : arm.from,
to : leg.to,
metres : d[0].distance,
oNum : arm.oNum,
dNum : leg.dNum
};
_.each(firstResult , function( item ){
logPostals.write(item.from +'\t'+ item.to +'\t'+item.metres +'\r\n')
})
goCompare();
}else{
}//end of if distance comparison
})//end of function callback from search
}//end of if data...
}//end of err...data
)//end of find
}
})
})
}//end of go compare###############
goCompare();