1. 一个产品 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 ,等等。 这个有什么好的算法解决呢?
2. 一个产品 A 如果需要升级到如上所述的 1.8 的话,首先需要升级到 1.5 ,然后再升级到 1.8 ,而且在每一次升级过程中还需要升级依赖的其他产品,如 A 从 1.1 升级到 1.5 ,需要将 B 升级到 1.9 ,将 C 升级到 2.1 ,这又会导致在升级 B 和 C 的时候,又需要安装他们的依赖。 那么用什么数据结构和算法来解决这个问题呢?
1. 第一个 把每生一次的权设为 1 的话,就是当前版本到最高版本的最短路径把? 2. 给个我的理解,可以参考 android 的 google play 服务。设置一个专门的提供服务的软件 d ,所有的软件升级统一依赖这个服务软件 d ,这样就可以把每个软件对其他多个软件的依赖转为单对软件 d 的依赖。在升级当前软件后发现缺少依赖的服务的话直接提示用户升级软件 d 到最新版本就好。
1. 通过将升级路径构造“图”数据结构可以找到最短路径,这样解决很好。 2. 产品是相互独立的,每个产品都有特定的依赖,怎么实现统一依赖软件 d 呢? 比如一套系统由 A , B , C , D 组成,如果 A 升级需要依赖 BCD 的版本,另一套系统由 E , F , G , H 组成, E 升级需要依赖 FGH 的版本。
domty
2015-10-22 17:18:09 +08:00
@sunway1988 第二个我只是提供一种参考方式,因为你提的需求恰好让我想到了 google play 服务框架的做法。 首先要确定每套系统到底依赖的是什么东西。 *比如一套系统由 A , B , C , D 组成,如果 A 升级需要依赖 BCD 的版本,另一套系统由 E , F , G , H 组成, E 升级需要依赖 FGH 的版本。* 你可以认为唯一被依赖软件(假设为 d)是一个被所有软件所共享的工具箱,当其他软件需要使用一些不是自己的动能的时候,就去工具箱找。所以当每个软件中存在除本身外还被其他软件所需要的功能的时候,这个功能就应该是可被所有软件共享的,就应该被放到工具箱(软件 d)里。