博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大前驱路径
阅读量:4514 次
发布时间:2019-06-08

本文共 806 字,大约阅读时间需要 2 分钟。

最大前驱路径是什么呢?

比如, 用户在页面中的访问路径是 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!!!

扩展

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

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

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

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

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

转载于:https://www.cnblogs.com/hujingnb/p/10591170.html

你可能感兴趣的文章
Java容器类源码分析前言之集合框架结构(基于JDK8)
查看>>
linux下C/C++程序的内存布局
查看>>
单词计数问题
查看>>
php 魔术方法 __autoload()
查看>>
js div拖动动画运行轨迹效果
查看>>
使用Struts 2框架实现文件下载
查看>>
把工程部署在tomcat的root路径下
查看>>
topcoder SRM 625 DIV2 AddMultiply
查看>>
Leetcode Climbing Stairs
查看>>
腾讯2013实习笔试题
查看>>
Recipe 1.9. Processing a String One Word at a Time
查看>>
Linux 下查看系统是32位 还是64 位的方法
查看>>
MySQL 引擎 和 InnoDB并发控制 简介
查看>>
Dave Python 练习二
查看>>
Integer类之成员变量
查看>>
菜根谭#179
查看>>
如何获取多个字符串中最长的共同子字符串?
查看>>
Android 开发笔记___textvieww__跑马灯效果
查看>>
[ JS 进阶 ] 闭包,作用域链,垃圾回收,内存泄露
查看>>
GitHub注册与Git安装
查看>>