最大前驱路径

最大前驱路径是什么呢?

比如, 用户在页面中的访问路径是 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}, 画成树,如下:

1457859-20190324221914978-1013835424.png (343×335)

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

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

代码实现

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

1457859-20190324224417566-690239369.png (714×1531)

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

扩展

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

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

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

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

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

订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请发表评论。x