Loading

最大前驱路径

最大前驱路径是什么呢?

比如, 用户在页面中的访问路径是 1,2,3,4 但是,用户不会按照正常设定好的路径进行访问, 用户的访问路径可能是 1,2,5,2 这时候,我们就要从访问路径中提取出 1,2,5

起始仔细观察发现也很简单, 思路如下: 

  1. 输入 1,2,5
  2. 当再次输入 2 时,我们发现这是一个回退事件, 进行回退, 并处理本条路径 1,2,5, 完美

是不是很简单, 但是,路径肯定是不止一条的, 可能用户的访问路径是这样的, {1,2,3,5,3,4,3,2,1,6}, 那么对应的访问路径就是{1234,1235,16}, 画成树,如下: 

按照刚才的思路,如何从这个序列中拿到我们想要的路径?

思路就是, 只要一发生回退事件,那就说明这条路径走到头了, 拿出来, 然后将序列置于回退事件的那个状态, 继续进行读入, 要避免连续回退事件输出同一条路径的情况, 这个加个状态就行. 

代码实现

好, 话不多说, 道理很简单, 用代码来实现一下

 

是不是很简单, so easy!!!

扩展

当然, 肯定不是这么简简单单的处理, 对于序列的处理, 可以用一个树来进行保存, 最后生成的就是一个最大前驱路径的树

树中的节点, 也可以使用类, 将事件的状态也保存进去, 如点击次数,浏览时间等等

还有一种情况, 就是可以将回退事件的状态也加进去, 为了避免对已处理过的事件进行重复处理, 需要增加一个记录上次处理到状态序列下标的变量, 这样, 每次都将事件状态加到树中, 最后生成的最大前驱树, 同时也包含了各个节点的各种信息, 接下来, 对这些信息进行怎样的处理, 那就看你咯

具体的落地, 看具体需求吧, 也不好生搬硬套, 只是提供一个思路

才疏学浅, 若有说的不当的地方, 还望指出, 共同进步, 谢谢 

posted @ 2019-03-24 22:52  烟草的香味  阅读(542)  评论(0编辑  收藏  举报