找手机游戏就上E酷网 专业手游媒体门户网站!

游戏更新 | 安卓游戏 | 苹果游戏 | 推荐游戏 | 软件更新 | 文章更新 | 热门文章 | 推荐文章

标签组合(标签组合的作用和设计要素)

时间:2023-10-28 10:05:19    编辑:azu

标签组合

标签是精细化运营不可或缺的工具。常见的使用场景包括标签推送和千人广告展示。在实际业务中,标签经常通过交、乘、差、反等方式一起使用,比如:标签组合是的,需要判断用户是否在这个集合中。

以千人展示广告为例,我们会有这样的需求:参与过开店计划的广州用户(美甲师或美甲师)展示广告a .参与过开店计划的深圳用户(美甲师或美甲店主)展示广告B。

标签描述:这里的标签都是用户标签。英文标签分别是:美甲师()、美甲师()、参与开店计划()、广州()和深圳()。

首先,从需求上,我们可以得到广告展示的标签表达:

一则广告:

标签组合

广告:

为了方便表达“交与差”的所有运算,“交与差”两个字分别为“+-!”意味着*,其中在操作中没有优先级差异,因此上面的表达式可以写成:

一则广告:

广告:

分析:一个用户包含多个标签。判断“一个用户”是否存在于“一组标签操作”中从而显示广告,核心是判断一个并集与另一个(多操作)集的交集关系。表达意义

把“交集和差”和(除了)的意思结合起来!)基于符号的左右组合原理,可以明确符号连接的两个标签(表达式)的含义:用“+”连接的两个标签(表达式)为or,只要其中一个与用户的标签相交,即为真。由“*”链接的两个标签(表达式)是相交的,确实左右两个标签都与用户的标签相交。由“-”链接的两个标签(表达式)相交,确实左边与用户的标签相交,右边与用户的标签不相交。「! "比较特殊的,是让标签(表达式)后面跟着相反的东西。转换成二叉树

明确含义后可以看出,只要递归进行左右运算,就可以得到用户是否在标签表达式集中的结果。一种非常适合左右运算的数据结构是二叉树,大致思路是:将表达式转换成二叉树。

递归二叉树判断

image.png

表达式的分析和基本的四则算术表达式基本相同,只是我们的含义不同,符号的优先级没有区别。a .中缀表达和后缀表达

中缀表达式是算术表达式,比如。后缀表达式(也叫逆波兰记法)就是操作数后面的运算符的表达式,比如上面的表达式写成:也可以达到去掉括号的效果。在转换过程中,堆栈将用于保存操作符号。转换过程中在字符分解中读取的中缀表达式找到内容111+1+1+21+212+* 1+2 * 12+* 31+2 * 3123+*/1+2 * 3/123+*/(1+2 * 3/(123(2+112321+*/(+)1+2 * 3/(2+1)12321+*/(1+2 * 3/(2+1)12321++ ++

可以看出,转换规则是按顺序读取字符:遇到操作数时,写输出。遇到,写入运算符堆栈。遇到时,从非空操作符堆栈中弹出一个项;如果该项不是,则写入输出;如果该项为,则退出循环。循环读取后,逐个弹出操作符栈,放在输出之后。代码实现(PHP)

输出:

标签组合

分析标签表达式

实现了基本的表达式解析,针对我们的标签表达式(多个字符组成一个标签),去掉“/”,加上“!”逻辑,略有修改:

输出:

b .将后缀表达式转换成二叉树

解析:根据后缀表达式的含义,符合表示前两个元素的运算。因此,在遍历时,可以使用堆栈来临时存储标签表达式。当遍历到符号时,会弹出两个标签作为其运算的左右元素,形成一个新的节点并放回堆栈中,这样循环就可以形成一棵完整的二叉树。

输出:

复习符号的含义:用“+”连接的两个标签(表达式)之间的关系是或,只要其中一个与用户的标签相交,则为真。由“*”链接的两个标签(表达式)是相交的,确实左右两个标签都与用户的标签相交。由“-”链接的两个标签(表达式)相交,确实左边与用户的标签相交,右边与用户的标签不相交。「!“比较特殊的,是让标记(表情)后面跟着相反的东西。

描述:在这里,函数传入的参数被设计为“用户标签”和上一步形成的“树”。用户标签是一个数组。判断逻辑首先简单判断是否存在于“用户标签”数组中。

实现

输出:

实际业务中,标签组合会更复杂。除了标签和标签组合之外,可能还有标签和标签组、用户标签和设备标签。我们来谈谈如何支持这些需求。

标签组实际上是通过标签的操作来组合的。例如:

标签组1:

标签组2:

结果:

如果有用户标签和设备标签组合,目前没有这个要求。如果您想这样做,可以考虑将参数isContained替换为一个对象,该对象包含一个用户标记数组和一个设备标记数组,然后标记表达式中的标记加上前缀:user tag()和device tag()。

例如:

标签表达式:

判断时,根据前缀选择使用用户标签还是设备标签。

除了“判断标签组是否包含用户”的要求,还有一个要求也是常用的:“判断标签表达式包含多少用户”。这个需求不仅涉及到逻辑,还涉及到数据库的设计,实现方案也和实际场景有关,这里不讨论。

以上代码段是缩短版,可能会有问题。如有错误,请指正。

玩家评论