问题是这样的
公司有很多产品需要实现在线自动更新(可以定时检查发起更新,也可能是用户自己发起),大致的解决方案如下:
升级客户端首先获取到产品的配置信息列表,里面包含一些可能的升级路径,比如可以从 1.1-1.2 升级到 1.5 ,并且需要包含一些依赖的其他组件或者数据库啊什么的内容包(这些当然也会当成是一个产品来升级),所以就有如下问题:
一个产品 A 如果升级的话,可能一次无法完成升级,需要从中间版本过渡,如 1.1 升级到 1.8 ,需要先升级到 1.5 ,然后再从 1.5 升级到 1.8 ,如何在配置的路径中找到最优的升级路径。配置的路径就是一些可实现升级的路径,如: from 1.1-1.2 to 1.5 , from 1.3 to 1.4 , from 1.4-1.7 to 1.8 ,等等。
这个有什么好的算法解决呢?一个产品 A 如果需要升级到如上所述的 1.8 的话,首先需要升级到 1.5 ,然后再升级到 1.8 ,而且在每一次升级过程中还需要升级依赖的其他产品,如 A 从 1.1 升级到 1.5 ,需要将 B 升级到 1.9 ,将 C 升级到 2.1 ,这又会导致在升级 B 和 C 的时候,又需要安装他们的依赖。
那么用什么数据结构和算法来解决这个问题呢?