feat(Go-Tool): 添加深度优先搜索算法工具类以及变种,分别对应以下场景
- 在N个道具中,提取所有M个道具的组合方案,这种方式可以用在 权重一样的 N个道具中选择一定的数量的道具组合(这种方案就是权重一样)
- 在N个道具中,提取超过一定价值V的所有组合方案,道具的数量没有限制,但是必须超过最低价值,也就是我们说的保底方案
- 在N个道具中,提取超过一定价值VMin,但是不超过一定价值VMax的组合方案,道具的数量没有限制,必须在最低价值和最高价值之间.
- 在N个道具中,提取超过一定价值V并且个数大小为M的所有组合方案,这个就是保证 保底的一定数量的道具
类似上面的方案,在游戏中可以在活动创建的时候,初始化所有的方案放到redis,然后每一次抽取都筛选下标来确认方案.这样就可以保证在一定的范围或者数量内确认对应的方案。
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/7/20 10:27
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
package deepSearchTest
|
||||
|
||||
import (
|
||||
"Go-Tool/util/deepSearch"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOriginDeepSearch(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchNum([]deepSearch.ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
}, {
|
||||
ItemId: 2,
|
||||
ItemValue: 2,
|
||||
}, {
|
||||
ItemId: 3,
|
||||
ItemValue: 3,
|
||||
}, {
|
||||
ItemId: 4,
|
||||
ItemValue: 4,
|
||||
}, {
|
||||
ItemId: 5,
|
||||
ItemValue: 5,
|
||||
},
|
||||
}, 6)
|
||||
|
||||
for _, r := range itemGroup {
|
||||
fmt.Println()
|
||||
for _, row := range r {
|
||||
fmt.Println(fmt.Sprintf("{%d %d}", row.ItemId, row.ItemValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeepSearch(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValue([]deepSearch.ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
}, {
|
||||
ItemId: 2,
|
||||
ItemValue: 2,
|
||||
}, {
|
||||
ItemId: 3,
|
||||
ItemValue: 3,
|
||||
}, {
|
||||
ItemId: 4,
|
||||
ItemValue: 4,
|
||||
}, {
|
||||
ItemId: 5,
|
||||
ItemValue: 5,
|
||||
},
|
||||
}, 5)
|
||||
|
||||
for _, r := range itemGroup {
|
||||
fmt.Println()
|
||||
for _, row := range r {
|
||||
fmt.Println(fmt.Sprintf("{%d %d}", row.ItemId, row.ItemValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeepSearchLimitNum(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueLimitNum([]deepSearch.ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
}, {
|
||||
ItemId: 2,
|
||||
ItemValue: 2,
|
||||
}, {
|
||||
ItemId: 3,
|
||||
ItemValue: 3,
|
||||
}, {
|
||||
ItemId: 4,
|
||||
ItemValue: 4,
|
||||
}, {
|
||||
ItemId: 5,
|
||||
ItemValue: 5,
|
||||
},
|
||||
}, 5, 4)
|
||||
|
||||
for _, r := range itemGroup {
|
||||
fmt.Println()
|
||||
for _, row := range r {
|
||||
fmt.Println(fmt.Sprintf("{%d %d}", row.ItemId, row.ItemValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
func TestDeepSearchInSection(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueInSection([]deepSearch.ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
}, {
|
||||
ItemId: 2,
|
||||
ItemValue: 2,
|
||||
}, {
|
||||
ItemId: 3,
|
||||
ItemValue: 3,
|
||||
}, {
|
||||
ItemId: 4,
|
||||
ItemValue: 4,
|
||||
}, {
|
||||
ItemId: 5,
|
||||
ItemValue: 5,
|
||||
},
|
||||
}, 5, 6)
|
||||
|
||||
for _, r := range itemGroup {
|
||||
fmt.Println()
|
||||
for _, row := range r {
|
||||
fmt.Println(fmt.Sprintf("{%d %d}", row.ItemId, row.ItemValue))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user