返回信息流有一千个规则,每条规则包含:x0,x1,x2,x3,...,x9,y0,y1,y2,y3,...,y9;
x0,x1,x2,x3,...,x9是由url中的url path组成,分别为path0,path1....path9;y0,y1,y2,y3,...,y9是由url中url query组成,分别为query0,query1,....,query9;
x0,x1,x2,x3,...,x9是有序的数据,其中x(i)可以为空,空可以匹配任何字符串;
y0,y1,y2,y3,...,y9是无序的数据,规则从前往后填写,不足10的话,后面字符串补空;
现在有一个url,和上述一千个规则比较,问能比较上那条规则?
这是一条镜像帖。来源:北邮人论坛 / cpp / #79505同步于 2014/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
数据规则匹配算法求解?大牛都来看看吧,急
wzq1318
2014/5/19镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这样应该可以:
1. 定义一个二维字符串数组:string regulations[1000][20];用来存放你的1000个规则,每个规则20个字符串。
2. 定义一个map的一维数组:map<string,vector<int>>[20] comparer; 程序开始对1里面定义的二维数组逐列进行分析,把字符串相同的行号和这个字符串放在map里面,字符串和行号是1对多的关系,所以行号用vector<int>来存放。
3. 假设你的url结构是这样的:http://path0/path1/path2/.../path9?query0=value0&query1=value1&...&query9=value9, 使用strstr函数或者其他字符串分割处理的库把这些path和value都取出来放在一个数组里面,这个数组这样定义:string urlContent[20];
4, 写个循环去遍历3里面的urlContent数组,每个数组元素用来从2里面那定义的map数组comparer里面获取符合条件的vector<int>,如果能找到,保存这个vector<int>, 如果map中没找到key和当前元素值相当,匹配空字符串在map中映射的vector<int>, 如果有的话。如没有,结束遍历,1000个规则没一个匹配的。之后元素的比较以此类推,获取的vector<int>里面的行号用来过滤之前获取到的vector<int>里面的行号,一直到最后,vector<int>里面剩下的行号所代表的规则和这个url相匹配。当然,最后vector<int>为空了,就不用遍历下去了,这个url不符合1000个规则中任何一个。
大概想到这个思路,楼主自己看看有没有启发吧。
这个不行吧。你这只处理了一级path,多级就不好处理了
【 在 rollse 的大作中提到: 】
: 这样应该可以:
: 1. 定义一个二维字符串数组:string regulations[1000][20];用来存放你的1000个规则,每个规则20个字符串。
: 2. 定义一个map的一维数组:map<string,vector<int>>[20] comparer; 程序开始对1里面定义的二维数组逐列进行分析,把字符串相同的行号和这个字符串放在map里面,字符串和行号是1对多的关系,所以行号用vector<int>来存放。
: ...................
按照上面假设的url的格式,url中所有path在第4步的遍历中会被依次处理,知道全部处理或者没找到匹配规则的退出遍历。
你的url格式是怎样的?怎么定义的二级path以及下面的path?
多给点信息啊便于讨论。
【 在 wzq1318 的大作中提到: 】
: 这个不行吧。你这只处理了一级path,多级就不好处理了
就是一个path:/key/word/html 其中path0为key;path1为word;path2为html
【 在 rollse 的大作中提到: 】
: 按照上面假设的url的格式,url中所有path在第4步的遍历中会被依次处理,知道全部处理或者没找到匹配规则的退出遍历。
: 你的url格式是怎样的?怎么定义的二级path以及下面的path?
: 多给点信息啊便于讨论。
: ...................
path前缀匹配,over
query你没说怎么算匹配上,规则全部命中全部query?规则全部命中部分query?规则部分命中全部query?规则部分命中部分query?
原始query必须命中query的全部规则,path怎么做的?qq多少,聊聊
【 在 binux 的大作中提到: 】
: path前缀匹配,over
: query你没说怎么算匹配上,规则全部命中全部query?规则全部命中部分query?规则部分命中全部query?规则部分命中部分query?
150一小时吗?
【 在 wzq1318 的大作中提到: 】
: 原始query必须命中query的全部规则,path怎么做的?qq多少,聊聊
哦,于是,我又发现,x(i)空白可以跳,那么
可以跳多个目录吗?任意字符串可以跳目录的一半吗?
我发这是讨论的,既然你不愿意说,你就别问了,没什么意思!你自己留着吧
【 在 binux 的大作中提到: 】
: 150一小时吗?
: 哦,于是,我又发现,x(i)空白可以跳,那么
: 可以跳多个目录吗?任意字符串可以跳目录的一半吗?
而且还不知道你的算法能用不
【 在 binux 的大作中提到: 】
: 150一小时吗?
: 哦,于是,我又发现,x(i)空白可以跳,那么
: 可以跳多个目录吗?任意字符串可以跳目录的一半吗?