feat(Go-Tool):修改单测位置,添加lomuto查找第k小元素算法代码及其单测(分治法)

This commit is contained in:
huangzj
2020-08-18 17:29:42 +08:00
parent 3f0e3b27f7
commit fa58e1a97f
27 changed files with 322 additions and 251 deletions
+1
View File
@@ -42,6 +42,7 @@
2020/8/6: 添加求背包问题最优解三种方式(KnapsackOptimizationUtil.go)及其单测类,添加求背包问题最优解过程路径(KnapsackSearchAnswerUtil.go)及其单测类.添加背包问题的readme相关说明 2020/8/6: 添加求背包问题最优解三种方式(KnapsackOptimizationUtil.go)及其单测类,添加求背包问题最优解过程路径(KnapsackSearchAnswerUtil.go)及其单测类.添加背包问题的readme相关说明
2020/8/18:修改单测位置,添加lomuto查找第k小元素算法代码及其单测(分治法)
# mod vendor模式加载包 # mod vendor模式加载包
@@ -1,46 +0,0 @@
/*
* @Author : huangzj
* @Time : 2020/8/5 15:40
* @Description
*/
package KnapsackOptimizationTest
import (
"Go-Tool/util/KnapsackOptimization"
"fmt"
"testing"
)
func TestKnapsackSearchAnswerUtil(t *testing.T) {
bagItem := make([]*KnapsackOptimization.BagItem, 0)
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 3,
Weight: 2,
})
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 3,
Weight: 3,
})
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 4,
Weight: 4,
})
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 5,
Weight: 5,
})
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 6,
Weight: 2,
})
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
Value: 7,
Weight: 2,
})
//通过回溯解背包问题
cmd := KnapsackOptimization.NewKnapsackSearchAnswer(bagItem, 12)
cmd.DynamicPlanForBestValue()
cmd.PrintBestSearchPath()
fmt.Println(fmt.Sprintf("最佳价值为:%d", cmd.BestValue()))
}
-56
View File
@@ -1,56 +0,0 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 11:27
* @Description
*/
package timed
import (
"Go-Tool/util/timed"
"fmt"
"testing"
"time"
)
func TestTimeIntervalUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetSecondsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetSecondsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetMinutesBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetMinutesAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetHoursBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetHoursAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetDaysBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetDaysAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetMonthsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetMonthsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetYearsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetYearsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
o1 := timed.GetIntervalBetweenTimes(time.Now().Unix(), time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
o2 := timed.GetIntervalBetweenTimes(time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix(), time.Now().Unix())
o3 := timed.GetIntervalBetweenTimes(time.Now().Unix(), time.Now().AddDate(3, -2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
fmt.Println(o1.IntervalYear, " y ", o1.IntervalMonth, " m ", o1.IntervalDay, " d ", o1.IntervalHour, " H ", o1.IntervalMinute, " mm ", o1.IntervalSecond, " ss ")
fmt.Println(o2.IntervalYear, " y ", o2.IntervalMonth, " m ", o2.IntervalDay, " d ", o2.IntervalHour, " H ", o2.IntervalMinute, " mm ", o2.IntervalSecond, " ss ")
fmt.Println(o3.IntervalYear, " y ", o3.IntervalMonth, " m ", o3.IntervalDay, " d ", o3.IntervalHour, " H ", o3.IntervalMinute, " mm ", o3.IntervalSecond, " ss ")
o4 := timed.GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().AddDate(3, -2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
o5 := timed.GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().Unix())
o6 := timed.GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
fmt.Println(o4.Year, " y ", o4.Month, " m ", o4.Week, " w ", o4.Day, " d ", o4.Hour, " H ", o4.Minute, " mm ", o4.Second, " ss ")
fmt.Println(o5.Year, " y ", o5.Month, " m ", o5.Week, " w ", o5.Day, " d ", o5.Hour, " H ", o5.Minute, " mm ", o5.Second, " ss ")
fmt.Println(o6.Year, " y ", o6.Month, " m ", o6.Week, " w ", o6.Day, " d ", o6.Hour, " H ", o6.Minute, " mm ", o6.Second, " ss ")
}
-37
View File
@@ -1,37 +0,0 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 13:35
* @Description
*/
package timed
import (
"Go-Tool/util/timed"
"fmt"
"testing"
"time"
)
func TestTimeCompareUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Println(timed.IsBefore(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Println(timed.IsBefore(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(timed.IsAfter(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Println(timed.IsAfter(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Print("\n\n")
fmt.Println(timed.IsSameTime(time.Now().Unix(), time.Now().Unix()))
fmt.Println(timed.IsSameTime(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(timed.IsDiffTime(time.Now().Unix(), time.Now().Unix()))
fmt.Println(timed.IsDiffTime(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(timed.IsBetween(time.Now().Unix(), time.Now().Unix(), time.Now().Unix()))
fmt.Println(timed.IsBetween(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Println(timed.IsBetween(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix(), time.Now().AddDate(0, 0, -1).Unix()))
}
-27
View File
@@ -1,27 +0,0 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 10:04
* @Description
*/
package timed
import (
"Go-Tool/util/timed"
"fmt"
"testing"
"time"
)
func TestTimeFormatUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Print(timed.GetTimeDefaultFormatString(timed.GetNowYearUnix()))
fmt.Print("\n\n")
fmt.Print(timed.GetTimeFormatString(timed.GetNowHourUnix(), time.ANSIC))
fmt.Print("\n\n")
fmt.Print(timed.GetNowDefaultFormatString())
fmt.Print("\n\n")
fmt.Println(timed.GetMonthFormatString(timed.GetNowHourUnix()))
fmt.Print("\n\n")
fmt.Println(timed.GetSimpleTimeFormatString(time.Now().Unix()))
}
@@ -4,24 +4,23 @@
* @Description * @Description
*/ */
package test package util
import ( import (
"Go-Tool/util"
"fmt" "fmt"
"testing" "testing"
) )
//不同方式获取哈希值,结果相差挺大,从输出的结果可以非常直观的看出 //不同方式获取哈希值,结果相差挺大,从输出的结果可以非常直观的看出
func TestHashMode(t *testing.T) { func TestHashMode(t *testing.T) {
fmt.Println(util.UseBigIntMod("3213444658987654", 9999999)) fmt.Println(UseBigIntMod("3213444658987654", 9999999))
//因为big.Int只能接受大数,所以如果这边传入字符串没办法转换成功,会发生报错 //因为big.Int只能接受大数,所以如果这边传入字符串没办法转换成功,会发生报错
//fmt.Println(util.UseBigIntMod("asdsadasdasdas", 20)) //fmt.Println(UseBigIntMod("asdsadasdasdas", 20))
fmt.Println(util.Mod("3213444658987654", 9999999)) fmt.Println(Mod("3213444658987654", 9999999))
fmt.Println(util.Crc32Mode("3213444658987654", 9999999)) fmt.Println(Crc32Mode("3213444658987654", 9999999))
fmt.Println() fmt.Println()
fmt.Println(util.Mod("asdsadasdasdas", 9999999)) fmt.Println(Mod("asdsadasdasdas", 9999999))
fmt.Println(util.Crc32Mode("asdsadasdasdas", 9999999)) fmt.Println(Crc32Mode("asdsadasdasdas", 9999999))
} }
@@ -7,7 +7,6 @@
package array package array
import ( import (
"Go-Tool/util/array"
"encoding/json" "encoding/json"
"fmt" "fmt"
"testing" "testing"
@@ -34,30 +33,30 @@ var (
func TestBool(t *testing.T) { func TestBool(t *testing.T) {
fmt.Print("\n\nContains\n\n") fmt.Print("\n\nContains\n\n")
fmt.Println(array.Contains(mm, mm)) fmt.Println(Contains(mm, mm))
fmt.Println(array.Contains(mm, mm1)) fmt.Println(Contains(mm, mm1))
fmt.Println(array.Contains(mm, MM{ fmt.Println(Contains(mm, MM{
A: 1, A: 1,
B: "2", B: "2",
})) }))
fmt.Print("\n\nNotContains\n\n") fmt.Print("\n\nNotContains\n\n")
fmt.Println(array.NotContains(mm, mm)) fmt.Println(NotContains(mm, mm))
fmt.Println(array.NotContains(mm, mm1)) fmt.Println(NotContains(mm, mm1))
fmt.Println(array.NotContains(mm, MM{ fmt.Println(NotContains(mm, MM{
A: 1, A: 1,
B: "2", B: "2",
})) }))
fmt.Print("\n\nIsSameList\n\n") fmt.Print("\n\nIsSameList\n\n")
fmt.Println(array.IsSameList(mm, mm)) fmt.Println(IsSameList(mm, mm))
fmt.Println(array.IsSameList(mm, nn1)) fmt.Println(IsSameList(mm, nn1))
fmt.Println(array.IsSameList(mm, mm2)) fmt.Println(IsSameList(mm, mm2))
fmt.Println(array.IsSameList(mm, nn)) fmt.Println(IsSameList(mm, nn))
fmt.Print("\n\nIsSubSet\n\n") fmt.Print("\n\nIsSubSet\n\n")
fmt.Println(array.IsSubSet(mm, mm)) fmt.Println(IsSubSet(mm, mm))
fmt.Println(array.IsSubSet(mm, mm1)) fmt.Println(IsSubSet(mm, mm1))
fmt.Println(array.IsSubSet(mm, mm2)) fmt.Println(IsSubSet(mm, mm2))
fmt.Println(array.IsSubSet(mm, nn)) fmt.Println(IsSubSet(mm, nn))
fmt.Printf("\n\n") fmt.Printf("\n\n")
} }
@@ -92,12 +91,12 @@ func TestJoin(t *testing.T) {
} }
func TestEqual(t *testing.T) { func TestEqual(t *testing.T) {
DeepCopyIntSlice() DeepCopyIntSlice11()
DeepCopyIntSlice2() DeepCopyIntSlice21()
} }
func intersection(mm, nn []interface{}) { func intersection(mm, nn []interface{}) {
i1 := array.Intersection(mm, nn) i1 := Intersection(mm, nn)
for _, row := range i1 { for _, row := range i1 {
b, err := json.Marshal(row) b, err := json.Marshal(row)
fmt.Println(err) fmt.Println(err)
@@ -106,7 +105,7 @@ func intersection(mm, nn []interface{}) {
} }
func diffSet(mm, nn []interface{}) { func diffSet(mm, nn []interface{}) {
i1 := array.DiffSet(mm, nn) i1 := DiffSet(mm, nn)
for _, row := range i1 { for _, row := range i1 {
b, _ := json.Marshal(row) b, _ := json.Marshal(row)
fmt.Print(string(b)) fmt.Print(string(b))
@@ -114,22 +113,22 @@ func diffSet(mm, nn []interface{}) {
} }
func union(mm, nn []interface{}) { func union(mm, nn []interface{}) {
i1 := array.Union(mm, nn) i1 := Union(mm, nn)
for _, row := range i1 { for _, row := range i1 {
b, _ := json.Marshal(row) b, _ := json.Marshal(row)
fmt.Print(string(b)) fmt.Print(string(b))
} }
} }
func DeepCopyIntSlice() { func DeepCopyIntSlice11() {
src := []int{1, 2, 3, 4, 5, 6} src := []int{1, 2, 3, 4, 5, 6}
src1 := array.DeepCopyIntSlice(src) src1 := DeepCopyIntSlice(src)
fmt.Println(&src == &src1) fmt.Println(&src == &src1)
} }
func DeepCopyIntSlice2() { func DeepCopyIntSlice21() {
src := [][]int{{1, 2, 3}, {4, 5, 6}} src := [][]int{{1, 2, 3}, {4, 5, 6}}
src1 := array.DeepCopyIntSlice2(src) src1 := DeepCopyIntSlice2(src)
fmt.Println(&src == &src1) fmt.Println(&src == &src1)
} }
@@ -4,17 +4,16 @@
* @Description * @Description
*/ */
package deepSearchTest package deepSearch
import ( import (
"Go-Tool/util/deepSearch"
"fmt" "fmt"
"testing" "testing"
) )
func TestOriginDeepSearch(t *testing.T) { func TestOriginDeepSearch(t *testing.T) {
srv := deepSearch.NewDeepSearch() srv := NewDeepSearch()
itemGroup := srv.GetItemMatchNum([]deepSearch.ItemValue{ itemGroup := srv.GetItemMatchNum([]ItemValue{
{ {
ItemId: 1, ItemId: 1,
ItemValue: 1, ItemValue: 1,
@@ -42,8 +41,8 @@ func TestOriginDeepSearch(t *testing.T) {
} }
func TestDeepSearch(t *testing.T) { func TestDeepSearch(t *testing.T) {
srv := deepSearch.NewDeepSearch() srv := NewDeepSearch()
itemGroup := srv.GetItemMatchValue([]deepSearch.ItemValue{ itemGroup := srv.GetItemMatchValue([]ItemValue{
{ {
ItemId: 1, ItemId: 1,
ItemValue: 1, ItemValue: 1,
@@ -71,8 +70,8 @@ func TestDeepSearch(t *testing.T) {
} }
func TestDeepSearchLimitNum(t *testing.T) { func TestDeepSearchLimitNum(t *testing.T) {
srv := deepSearch.NewDeepSearch() srv := NewDeepSearch()
itemGroup := srv.GetItemMatchValueLimitNum([]deepSearch.ItemValue{ itemGroup := srv.GetItemMatchValueLimitNum([]ItemValue{
{ {
ItemId: 1, ItemId: 1,
ItemValue: 1, ItemValue: 1,
@@ -99,8 +98,8 @@ func TestDeepSearchLimitNum(t *testing.T) {
} }
} }
func TestDeepSearchInSection(t *testing.T) { func TestDeepSearchInSection(t *testing.T) {
srv := deepSearch.NewDeepSearch() srv := NewDeepSearch()
itemGroup := srv.GetItemMatchValueInSection([]deepSearch.ItemValue{ itemGroup := srv.GetItemMatchValueInSection([]ItemValue{
{ {
ItemId: 1, ItemId: 1,
ItemValue: 1, ItemValue: 1,
@@ -7,22 +7,21 @@
package file package file
import ( import (
"Go-Tool/util/file"
"encoding/json" "encoding/json"
"fmt" "fmt"
"testing" "testing"
) )
func TestReadFileLineNum(t *testing.T) { func TestReadFileLineNum(t *testing.T) {
fmt.Print(file.ReadFileLineNum("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest\\1\\11.txt")) fmt.Print(ReadFileLineNum("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest\\1\\11.txt"))
} }
func TestReadFileLineNumExceptEmptyLine(t *testing.T) { func TestReadFileLineNumExceptEmptyLine(t *testing.T) {
fmt.Println(file.ReadFileLineNumExceptEmptyLine("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest\\1\\11.txt")) fmt.Println(ReadFileLineNumExceptEmptyLine("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest\\1\\11.txt"))
} }
func TestReadJsonFile(t *testing.T) { func TestReadJsonFile(t *testing.T) {
content, _ := file.ReadJsonFile("F:\\Go个人代码\\src\\Go-Tool\\test\\file\\json_file_test_mode.json") content, _ := ReadJsonFile("F:\\Go个人代码\\src\\Go-Tool\\util\\file\\json_file_test_mode.json")
fmt.Println(content) fmt.Println(content)
var testMode JsonTestMode var testMode JsonTestMode
_ = json.Unmarshal([]byte(content), &testMode) _ = json.Unmarshal([]byte(content), &testMode)
@@ -7,7 +7,6 @@
package file package file
import ( import (
"Go-Tool/util/file"
"fmt" "fmt"
"testing" "testing"
) )
@@ -21,7 +20,7 @@ var (
) )
func TestGetAllFileNameFromDir(t *testing.T) { func TestGetAllFileNameFromDir(t *testing.T) {
s := file.GetAllFileNameFromDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest") s := GetAllFileNameFromDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest")
for _, row := range s { for _, row := range s {
fmt.Print(row) fmt.Print(row)
@@ -29,7 +28,7 @@ func TestGetAllFileNameFromDir(t *testing.T) {
} }
func TestGetAllEmptyDir(t *testing.T) { func TestGetAllEmptyDir(t *testing.T) {
_, s := file.GetAllEmptyDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest") _, s := GetAllEmptyDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest")
for _, row := range s { for _, row := range s {
fmt.Print(fmt.Sprint(row, "\n\n")) fmt.Print(fmt.Sprint(row, "\n\n"))
@@ -37,7 +36,7 @@ func TestGetAllEmptyDir(t *testing.T) {
} }
func TestGetAllDir(t *testing.T) { func TestGetAllDir(t *testing.T) {
_, s := file.GetAllDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest") _, s := GetAllDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest")
for _, row := range s { for _, row := range s {
fmt.Print(row) fmt.Print(row)
@@ -45,7 +44,7 @@ func TestGetAllDir(t *testing.T) {
} }
func TestGetAllNotEmptyDir(t *testing.T) { func TestGetAllNotEmptyDir(t *testing.T) {
_, s := file.GetAllNotEmptyDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest") _, s := GetAllNotEmptyDir("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest")
for _, row := range s { for _, row := range s {
fmt.Print(row) fmt.Print(row)
@@ -4,7 +4,7 @@
* @Description背包道具 * @Description背包道具
*/ */
package KnapsackOptimization package knapsackOptimization
type BagItem struct { type BagItem struct {
Value int //道具价值 Value int //道具价值
@@ -6,7 +6,7 @@
* 参考地址https://blog.csdn.net/chanmufeng/article/details/82955730 * 参考地址https://blog.csdn.net/chanmufeng/article/details/82955730
*/ */
package KnapsackOptimization package knapsackOptimization
type KnapsackOptimization struct { type KnapsackOptimization struct {
BagCapacity int //背包的总容量上限 BagCapacity int //背包的总容量上限
@@ -6,43 +6,42 @@
* 参考地址https://blog.csdn.net/chanmufeng/article/details/82955730 * 参考地址https://blog.csdn.net/chanmufeng/article/details/82955730
*/ */
package KnapsackOptimizationTest package knapsackOptimization
import ( import (
"Go-Tool/util/KnapsackOptimization"
"fmt" "fmt"
"testing" "testing"
) )
func TestKnapsackOptimizationUtil(t *testing.T) { func TestKnapsackOptimizationUtil(t *testing.T) {
bagItem := make([]*KnapsackOptimization.BagItem, 0) bagItem := make([]*BagItem, 0)
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 3, Value: 3,
Weight: 2, Weight: 2,
}) })
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 3, Value: 3,
Weight: 3, Weight: 3,
}) })
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 4, Value: 4,
Weight: 4, Weight: 4,
}) })
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 5, Value: 5,
Weight: 5, Weight: 5,
}) })
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 6, Value: 6,
Weight: 2, Weight: 2,
}) })
bagItem = append(bagItem, &KnapsackOptimization.BagItem{ bagItem = append(bagItem, &BagItem{
Value: 7, Value: 7,
Weight: 2, Weight: 2,
}) })
cmd := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12) cmd := NewKnapsackOptimization(bagItem, 12)
cmd1 := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12) cmd1 := NewKnapsackOptimization(bagItem, 12)
cmd2 := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12) cmd2 := NewKnapsackOptimization(bagItem, 12)
fmt.Print(cmd.OptimizePackageByRecursion()) //通过递归解背包问题 fmt.Print(cmd.OptimizePackageByRecursion()) //通过递归解背包问题
fmt.Println(cmd1.KnapsackCycle()) //通过逆序解背包问题. fmt.Println(cmd1.KnapsackCycle()) //通过逆序解背包问题.
@@ -4,7 +4,7 @@
* @Description * @Description
*/ */
package KnapsackOptimization package knapsackOptimization
import "fmt" import "fmt"
@@ -0,0 +1,45 @@
/*
* @Author : huangzj
* @Time : 2020/8/5 15:40
* @Description
*/
package knapsackOptimization
import (
"fmt"
"testing"
)
func TestKnapsackSearchAnswerUtil(t *testing.T) {
bagItem := make([]*BagItem, 0)
bagItem = append(bagItem, &BagItem{
Value: 3,
Weight: 2,
})
bagItem = append(bagItem, &BagItem{
Value: 3,
Weight: 3,
})
bagItem = append(bagItem, &BagItem{
Value: 4,
Weight: 4,
})
bagItem = append(bagItem, &BagItem{
Value: 5,
Weight: 5,
})
bagItem = append(bagItem, &BagItem{
Value: 6,
Weight: 2,
})
bagItem = append(bagItem, &BagItem{
Value: 7,
Weight: 2,
})
//通过回溯解背包问题
cmd := NewKnapsackSearchAnswer(bagItem, 12)
cmd.DynamicPlanForBestValue()
cmd.PrintBestSearchPath()
fmt.Println(fmt.Sprintf("最佳价值为:%d", cmd.BestValue()))
}
@@ -7,16 +7,15 @@
package rand package rand
import ( import (
"Go-Tool/util/rand"
"fmt" "fmt"
"strconv" "strconv"
"testing" "testing"
) )
func TestRandByWeight(t *testing.T) { func TestRandByWeight(t *testing.T) {
fmt.Printf(strconv.Itoa(rand.GetRandValueByWeight([]int{10, 20, 30, 50}))) fmt.Printf(strconv.Itoa(GetRandValueByWeight([]int{10, 20, 30, 50})))
list, list1 := rand.GetAwardByWeight([][]int{{2, 2, 10}, {3, 3, 4}}) list, list1 := GetAwardByWeight([][]int{{2, 2, 10}, {3, 3, 4}})
for _, r := range list { for _, r := range list {
fmt.Println(strconv.Itoa(r)) fmt.Println(strconv.Itoa(r))
} }
@@ -24,9 +23,9 @@ func TestRandByWeight(t *testing.T) {
fmt.Println(strconv.Itoa(r)) fmt.Println(strconv.Itoa(r))
} }
fmt.Println(rand.GetByWeight([]int{10, 11, 12, 13}, []int{20, 30, 40, 50})) fmt.Println(GetByWeight([]int{10, 11, 12, 13}, []int{20, 30, 40, 50}))
list2, list3 := rand.GetAwardByWeightWithLeftAward([][]int{{2, 3, 30}, {3, 3, 40}}) list2, list3 := GetAwardByWeightWithLeftAward([][]int{{2, 3, 30}, {3, 3, 40}})
for _, r := range list2 { for _, r := range list2 {
fmt.Println(strconv.Itoa(r)) fmt.Println(strconv.Itoa(r))
} }
@@ -36,14 +35,14 @@ func TestRandByWeight(t *testing.T) {
} }
} }
list4 := rand.GetCountAwardsFromPool([][]int{{1, 2, 30}, {2, 2, 40}, {3, 2, 50}}, 2) list4 := GetCountAwardsFromPool([][]int{{1, 2, 30}, {2, 2, 40}, {3, 2, 50}}, 2)
for _, r := range list4 { for _, r := range list4 {
for _, r1 := range r { for _, r1 := range r {
fmt.Println(strconv.Itoa(r1)) fmt.Println(strconv.Itoa(r1))
} }
} }
list5 := rand.GetAwardByPercentage([][]int{{20, 3, 99}, {90, 3, 10}, {12, 3, 22}}, 100) list5 := GetAwardByPercentage([][]int{{20, 3, 99}, {90, 3, 10}, {12, 3, 22}}, 100)
for _, r := range list5 { for _, r := range list5 {
fmt.Println(strconv.Itoa(r)) fmt.Println(strconv.Itoa(r))
} }
@@ -7,19 +7,18 @@
package rand package rand
import ( import (
"Go-Tool/util/rand"
"fmt" "fmt"
"strconv" "strconv"
"testing" "testing"
) )
func TestRand(t *testing.T) { func TestRand(t *testing.T) {
fmt.Printf(strconv.Itoa(rand.GetRandInt(100, 2000))) fmt.Printf(strconv.Itoa(GetRandInt(100, 2000)))
for _, r := range rand.GetRandIntNoRepeat(10, 100, 200) { for _, r := range GetRandIntNoRepeat(10, 100, 200) {
fmt.Printf(strconv.Itoa(r)) fmt.Printf(strconv.Itoa(r))
} }
for _, r := range rand.GetDiffNum([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 10) { for _, r := range GetDiffNum([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 10) {
fmt.Printf(strconv.Itoa(r)) fmt.Printf(strconv.Itoa(r))
} }
} }
+47
View File
@@ -0,0 +1,47 @@
/*
* @Author : huangzj
* @Time : 2020/8/18 14:11
* @DescriptionLomuto划分,找到一个数组中第k个小的元素.这边只是提供一个示例,具体类型可以根据该算法进行修改
*/
package search
//参数说明:
//list :数组
//start : 开始比较的数字下标
//end :结束比较的数字下标
//作用说明:
func partition(list []int, start int, end int) int {
moveSubscript := start
compareValue := list[start]
for i := start + 1; i <= end; i++ {
if list[i] < compareValue {
moveSubscript++
list[moveSubscript], list[i] = list[i], list[moveSubscript]
}
}
list[moveSubscript], list[start] = list[start], list[moveSubscript] //交换元素
return moveSubscript
}
func LomutoQuiteSelect(list []int, pointPosition int) int {
positionCheck(pointPosition, len(list)) //下标校验
nowPosition := partition(list, 0, len(list)-1)
//循环进行lomuto划分处理,知道找到我们需要的那个位置的元素
for nowPosition != pointPosition-1 {
if nowPosition > pointPosition-1 {
nowPosition = partition(list, 0, nowPosition)
} else {
nowPosition = partition(list, nowPosition+1, len(list)-1)
}
}
return list[nowPosition]
}
func positionCheck(pointPosition int, len int) {
if pointPosition <= 0 || pointPosition > len {
panic("查询的元素下标不能小于0,或者大于数组长度")
}
}
+37
View File
@@ -0,0 +1,37 @@
/*
* @Author : huangzj
* @Time : 2020/8/18 14:54
* @Description
*/
package search
import (
"fmt"
"testing"
)
func TestPartition(t *testing.T) {
list := []int{99, 1, 2, 3, 4, 100, 200, 90, 5}
s := partition(list, 0, 9-1)
fmt.Println(fmt.Sprintf("当前第一个元素应该存在位置为:%d", s))
for _, r := range list {
fmt.Print(r, " ")
}
s = partition(list, 0, 9-1)
fmt.Println(fmt.Sprintf("当前第一个元素应该存在位置为:%d", s))
for _, r := range list {
fmt.Print(r, " ")
}
}
func TestLomutoQuiteSelect(t *testing.T) {
for k := 1; k <= 9; k++ {
s := LomutoQuiteSelect([]int{99, 1, 2, 3, 4, 100, 200, 90, 5}, k)
fmt.Println(fmt.Sprintf("当前第%d个小的元素是:%d", k, s))
fmt.Println()
}
}
@@ -7,13 +7,12 @@
package set package set
import ( import (
set2 "Go-Tool/util/set"
"fmt" "fmt"
"testing" "testing"
) )
func TestSet(t *testing.T) { func TestSet(t *testing.T) {
set := new(set2.Set) set := new(Set)
set.Add(1) set.Add(1)
set.Add(2) set.Add(2)
set.Add("123") set.Add("123")
+55
View File
@@ -0,0 +1,55 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 11:27
* @Description
*/
package timed
import (
"fmt"
"testing"
"time"
)
func TestTimeIntervalUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetSecondsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetSecondsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetMinutesBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetMinutesAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetHoursBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetHoursAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetDaysBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetDaysAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetMonthsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetMonthsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetYearsBefore(time.Now().Unix(), 10)))
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetYearsAfter(time.Now().Unix(), 10)))
fmt.Print("\n\n")
o1 := GetIntervalBetweenTimes(time.Now().Unix(), time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
o2 := GetIntervalBetweenTimes(time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix(), time.Now().Unix())
o3 := GetIntervalBetweenTimes(time.Now().Unix(), time.Now().AddDate(3, -2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
fmt.Println(o1.IntervalYear, " y ", o1.IntervalMonth, " m ", o1.IntervalDay, " d ", o1.IntervalHour, " H ", o1.IntervalMinute, " mm ", o1.IntervalSecond, " ss ")
fmt.Println(o2.IntervalYear, " y ", o2.IntervalMonth, " m ", o2.IntervalDay, " d ", o2.IntervalHour, " H ", o2.IntervalMinute, " mm ", o2.IntervalSecond, " ss ")
fmt.Println(o3.IntervalYear, " y ", o3.IntervalMonth, " m ", o3.IntervalDay, " d ", o3.IntervalHour, " H ", o3.IntervalMinute, " mm ", o3.IntervalSecond, " ss ")
o4 := GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().AddDate(3, -2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
o5 := GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().Unix())
o6 := GetIntervalBetweenTimesDetail(time.Now().Unix(), time.Now().AddDate(3, 2, 5).Add(5*time.Hour).Add(7*time.Minute).Add(10*time.Second).Unix())
fmt.Println(o4.Year, " y ", o4.Month, " m ", o4.Week, " w ", o4.Day, " d ", o4.Hour, " H ", o4.Minute, " mm ", o4.Second, " ss ")
fmt.Println(o5.Year, " y ", o5.Month, " m ", o5.Week, " w ", o5.Day, " d ", o5.Hour, " H ", o5.Minute, " mm ", o5.Second, " ss ")
fmt.Println(o6.Year, " y ", o6.Month, " m ", o6.Week, " w ", o6.Day, " d ", o6.Hour, " H ", o6.Minute, " mm ", o6.Second, " ss ")
}
+36
View File
@@ -0,0 +1,36 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 13:35
* @Description
*/
package timed
import (
"fmt"
"testing"
"time"
)
func TestTimeCompareUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Println(IsBefore(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Println(IsBefore(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(IsAfter(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Println(IsAfter(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Print("\n\n")
fmt.Println(IsSameTime(time.Now().Unix(), time.Now().Unix()))
fmt.Println(IsSameTime(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(IsDiffTime(time.Now().Unix(), time.Now().Unix()))
fmt.Println(IsDiffTime(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix()))
fmt.Print("\n\n")
fmt.Println(IsBetween(time.Now().Unix(), time.Now().Unix(), time.Now().Unix()))
fmt.Println(IsBetween(time.Now().Unix(), time.Now().AddDate(0, 0, -1).Unix(), time.Now().AddDate(0, 0, 1).Unix()))
fmt.Println(IsBetween(time.Now().Unix(), time.Now().AddDate(0, 0, 1).Unix(), time.Now().AddDate(0, 0, -1).Unix()))
}
+26
View File
@@ -0,0 +1,26 @@
/*
* @Author : huangzj
* @Time : 2020/5/7 10:04
* @Description
*/
package timed
import (
"fmt"
"testing"
"time"
)
func TestTimeFormatUtil(t *testing.T) {
fmt.Print("\n\n")
fmt.Print(GetTimeDefaultFormatString(GetNowYearUnix()))
fmt.Print("\n\n")
fmt.Print(GetTimeFormatString(GetNowHourUnix(), time.ANSIC))
fmt.Print("\n\n")
fmt.Print(GetNowDefaultFormatString())
fmt.Print("\n\n")
fmt.Println(GetMonthFormatString(GetNowHourUnix()))
fmt.Print("\n\n")
fmt.Println(GetSimpleTimeFormatString(time.Now().Unix()))
}
@@ -7,25 +7,24 @@
package timed package timed
import ( import (
"Go-Tool/util/timed"
"fmt" "fmt"
"testing" "testing"
) )
func TestTimeStampUtil(t *testing.T) { func TestTimeStampUtil(t *testing.T) {
fmt.Print("\n\n") fmt.Print("\n\n")
fmt.Println(timed.GetNowHourUnix()) fmt.Println(GetNowHourUnix())
fmt.Print("\n\n") fmt.Print("\n\n")
fmt.Println(timed.GetNowUnix()) fmt.Println(GetNowUnix())
fmt.Print("\n\n") fmt.Print("\n\n")
fmt.Println(timed.GetZeroHourUnix()) fmt.Println(GetZeroHourUnix())
fmt.Print("\n\n") fmt.Print("\n\n")
fmt.Println(timed.GetNowYearUnix()) fmt.Println(GetNowYearUnix())
fmt.Print("\n\n") fmt.Print("\n\n")
fmt.Println(timed.GetNowMonthUnix()) fmt.Println(GetNowMonthUnix())
} }