BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #79505同步于 2014/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

数据规则匹配算法求解?大牛都来看看吧,急

wzq1318
2014/5/19镜像同步9 回复
有一千个规则,每条规则包含: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,和上述一千个规则比较,问能比较上那条规则?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rollse机器人#1 · 2014/5/19
这样应该可以: 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个规则中任何一个。 大概想到这个思路,楼主自己看看有没有启发吧。
wzq1318机器人#2 · 2014/5/20
这个不行吧。你这只处理了一级path,多级就不好处理了 【 在 rollse 的大作中提到: 】 : 这样应该可以: : 1. 定义一个二维字符串数组:string regulations[1000][20];用来存放你的1000个规则,每个规则20个字符串。 : 2. 定义一个map的一维数组:map<string,vector<int>>[20] comparer; 程序开始对1里面定义的二维数组逐列进行分析,把字符串相同的行号和这个字符串放在map里面,字符串和行号是1对多的关系,所以行号用vector<int>来存放。 : ...................
rollse机器人#3 · 2014/5/20
按照上面假设的url的格式,url中所有path在第4步的遍历中会被依次处理,知道全部处理或者没找到匹配规则的退出遍历。 你的url格式是怎样的?怎么定义的二级path以及下面的path? 多给点信息啊便于讨论。 【 在 wzq1318 的大作中提到: 】 : 这个不行吧。你这只处理了一级path,多级就不好处理了
wzq1318机器人#4 · 2014/5/20
就是一个path:/key/word/html 其中path0为key;path1为word;path2为html 【 在 rollse 的大作中提到: 】 : 按照上面假设的url的格式,url中所有path在第4步的遍历中会被依次处理,知道全部处理或者没找到匹配规则的退出遍历。 : 你的url格式是怎样的?怎么定义的二级path以及下面的path? : 多给点信息啊便于讨论。 : ...................
binux机器人#5 · 2014/5/20
path前缀匹配,over query你没说怎么算匹配上,规则全部命中全部query?规则全部命中部分query?规则部分命中全部query?规则部分命中部分query?
wzq1318机器人#6 · 2014/5/20
原始query必须命中query的全部规则,path怎么做的?qq多少,聊聊 【 在 binux 的大作中提到: 】 : path前缀匹配,over : query你没说怎么算匹配上,规则全部命中全部query?规则全部命中部分query?规则部分命中全部query?规则部分命中部分query?
binux机器人#7 · 2014/5/20
150一小时吗? 【 在 wzq1318 的大作中提到: 】 : 原始query必须命中query的全部规则,path怎么做的?qq多少,聊聊 哦,于是,我又发现,x(i)空白可以跳,那么 可以跳多个目录吗?任意字符串可以跳目录的一半吗?
wzq1318机器人#8 · 2014/5/20
我发这是讨论的,既然你不愿意说,你就别问了,没什么意思!你自己留着吧 【 在 binux 的大作中提到: 】 : 150一小时吗? : 哦,于是,我又发现,x(i)空白可以跳,那么 : 可以跳多个目录吗?任意字符串可以跳目录的一半吗?
wzq1318机器人#9 · 2014/5/20
而且还不知道你的算法能用不 【 在 binux 的大作中提到: 】 : 150一小时吗? : 哦,于是,我又发现,x(i)空白可以跳,那么 : 可以跳多个目录吗?任意字符串可以跳目录的一半吗?