feat(Go-Tool): 添加深度优先搜索算法工具类以及变种,分别对应以下场景

- 在N个道具中,提取所有M个道具的组合方案,这种方式可以用在 权重一样的 N个道具中选择一定的数量的道具组合(这种方案就是权重一样)
               - 在N个道具中,提取超过一定价值V的所有组合方案,道具的数量没有限制,但是必须超过最低价值,也就是我们说的保底方案
               - 在N个道具中,提取超过一定价值VMin,但是不超过一定价值VMax的组合方案,道具的数量没有限制,必须在最低价值和最高价值之间.
               - 在N个道具中,提取超过一定价值V并且个数大小为M的所有组合方案,这个就是保证 保底的一定数量的道具

               类似上面的方案,在游戏中可以在活动创建的时候,初始化所有的方案放到redis,然后每一次抽取都筛选下标来确认方案.这样就可以保证在一定的范围或者数量内确认对应的方案。
This commit is contained in:
huangzj
2020-07-20 22:02:25 +08:00
parent 16ebb4a7e0
commit 223baa60ba
4 changed files with 369 additions and 0 deletions
+128
View File
@@ -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))
}
}
}