SQL实现最优坐地铁方案
2007-12-07 19:47:52 来源:WEB开发网
结果, 2/3 是换乘次数(应该减一, 将上面代码中初始化 line_count 的地方从1改成0即可):
3{1.广州东-> 2.体育西-> 3.珠江新城-> 4.客村)-> 2{5.客村-> 4.中大} 2 5
1{1.广州东-> 2.体育中心-> 3.体育西)-> 3{2.体育西-> 3.珠江新城-> 4.客村)-> 2{5.客村-> 4.中大} 3 7
数据的问题, 我的算法依赖于 orderid 来搜索下一站, 如果这个不连续, 则无法搜索下一站
所以把数据改成下面的就行了
SQL code
修改后的执行结果(换乘数已经改成初始化为0)
3{1.广州东-> 2.体育西-> 3.珠江新城-> 4.客村)-> 2{5.客村-> 4.中大} 1 5
3{1.广州东-> 2.体育西)-> 1{3.体育西-> 4.烈士陵园-> 5.公园前)-> 2{3.公园前-> 4.中大} 2 6
1{1.广州东-> 2.体育中心-> 3.体育西-> 4.烈士陵园-> 5.公园前)-> 2{3.公园前-> 4.中大} 1 6
1{1.广州东-> 2.体育中心-> 3.体育西)-> 3{2.体育西-> 3.珠江新城-> 4.客村)-> 2{5.客村-> 4.中大} 2 7
如果 orderid 在实际数据中确实有不连续的问题, 则可以在处理之前先把数据导到临时表, 生成连续的 orderid, 再用我的算法来查询结果。这次的算法相比之前的算法有改进, 只有换乘才会判断是否已经走过此线路, 其他方面也略有调整, 应该比以前的好。你可以测试一下!
实际使用时, 算法上可以稍做调到:
1. 直接计算出 next_orderid, 而不是每次用 flag 去算, 这样可以提高 join 效率
2. 表变量改成临时表, 这样可以在相关的列上建立索引, 从而更快的与原表 join (当然, 原表相关的列上也要有索引)
- ››sql server自动生成批量执行SQL脚本的批处理
- ››实现PHP页面静态化
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››实现android 再按一次退出程序代码
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››实现Win8中IE10收藏夹漫游
更多精彩
赞助商链接