最大前驱路径

最大前驱路径是什么呢?

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

时间: 2024-10-14 23:55:13

最大前驱路径的相关文章

LICS O(n*m)+前驱路径

LICS:最长公共上升子序列: 一般令f[i][j]表示a串前i位,b串以j结尾的LICS长度.于是,答案为:max(1~m)(f[n][i]); 朴素做法:O(n^3) 相等时,从1~j-1枚举最大值. for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {if(a[i]!=b[j]) f[i][j]=f[i-1][j]; else if(a[i]==b[j]) for(int k=1;k<j;k++) if(b[k]<b[j]) f[i][j

关于自动寻径和图、邻接表的学习和启发

以后的游戏中可能会用到人物的自动寻径,在网上看到一个非常不错的博文,特学习了一下,并转了过来为以后留着... 再次感谢 Siliphen的分享,本文转载自 http://blog.csdn.net/stevenkylelee/article/details/38408253 本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 本文的实现使用的环境是:Cocos2d-x 3.2,VS2013 本文,我们最终实现的地图行走效果如下2图:

Cocos2d-x 地图行走的实现:图论与Dijkstra

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee 本文的实现基于Cocos2d-x 3.2. 本文,我们最终实现的地图行走效果如下2图: 下面是2张屏幕录制的gif动画图,有点大,看不到的话,耐心等待一下,或者刷新页面试试. 地图行走用于现实的地图上. 1.什么是地图行走 很多游戏会有一个"世界"的概念.玩家在这个世界中行走,到达不同的地方去执行的任务,打怪或者是触发剧情等.下图是<锁链战记>的世界地图的截图.

A&#215;算法:

  In games we often want to find paths from one location to another. We’re not just trying to find the shortest distance; we also want to take into account travel time. In this map, walking through water is significantly slower, so we want to find a

最短路(最短路之积)

首先考虑暴力维护,显然极端数据就会炸裂,那么用什么来维护呢? 考虑一个很 NB 的公式log(n*m)=log(n)+log(m) OK ,这道题到此结束 我们只要把乘积转化为对数,最后再还原就可以了,也不用考虑精度问题,本蒟蒻试着用pow,然后它死了. 代码 #include<bits/stdc++.h> using namespace std; const int mod=9987; const int N=1e3+5; const int M=1e6+5; int head[N],tot

hiho 第118周 网络流四&#183;最小路径覆盖

描述 国庆期间正是旅游和游玩的高峰期. 小Hi和小Ho的学习小组为了研究课题,决定趁此机会派出若干个调查团去沿途查看一下H市内各个景点的游客情况. H市一共有N个旅游景点(编号1..N),由M条单向游览路线连接.在一个景点游览完后,可以顺着游览线路前往下一个景点. 为了避免游客重复游览同一个景点,游览线路保证是没有环路的. 每一个调查团可以从任意一个景点出发,沿着计划好的游览线路依次调查,到达终点后再返回.每个景点只会有一个调查团经过,不会重复调查. 举个例子: 上图中一共派出了3个调查团: 1

学霸的迷宫(BFS+记录路径)

1 //求从(sx.sy)到(gx.gy)的最短距离; 2 3 #include<iostream> 4 #include<cstdio> 5 #include<cstdio> 6 #include<queue> 7 #include<cstring> 8 #define INF 99999999 9 10 using namespace std; 11 12 typedef pair<int, int > P; //数对,记录位置

HDU 1026 Ignatius and the Princess I(BFS+路径输出)

Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19800    Accepted Submission(s): 6452Special Judge Problem Description The Princess has been abducted by the BEelzebub

HDU1026--Ignatius and the Princess I(BFS记录路径)

Problem Description The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has to rescue our pretty Princess. Now he gets into feng5166's castle. The castle is a large labyrinth. To make the problem simply, we assume the labyrint