feat(Go-Tool):修改单测位置,添加lomuto查找第k小元素算法代码及其单测(分治法)
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
|
||||
2020/8/6: 添加求背包问题最优解三种方式(KnapsackOptimizationUtil.go)及其单测类,添加求背包问题最优解过程路径(KnapsackSearchAnswerUtil.go)及其单测类.添加背包问题的readme相关说明
|
||||
|
||||
2020/8/18:修改单测位置,添加lomuto查找第k小元素算法代码及其单测(分治法)
|
||||
|
||||
|
||||
# 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()))
|
||||
}
|
||||
@@ -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 ")
|
||||
}
|
||||
@@ -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()))
|
||||
}
|
||||
@@ -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:
|
||||
*/
|
||||
|
||||
package test
|
||||
package util
|
||||
|
||||
import (
|
||||
"Go-Tool/util"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
//不同方式获取哈希值,结果相差挺大,从输出的结果可以非常直观的看出
|
||||
func TestHashMode(t *testing.T) {
|
||||
fmt.Println(util.UseBigIntMod("3213444658987654", 9999999))
|
||||
fmt.Println(UseBigIntMod("3213444658987654", 9999999))
|
||||
//因为big.Int只能接受大数,所以如果这边传入字符串没办法转换成功,会发生报错
|
||||
//fmt.Println(util.UseBigIntMod("asdsadasdasdas", 20))
|
||||
fmt.Println(util.Mod("3213444658987654", 9999999))
|
||||
fmt.Println(util.Crc32Mode("3213444658987654", 9999999))
|
||||
//fmt.Println(UseBigIntMod("asdsadasdasdas", 20))
|
||||
fmt.Println(Mod("3213444658987654", 9999999))
|
||||
fmt.Println(Crc32Mode("3213444658987654", 9999999))
|
||||
|
||||
fmt.Println()
|
||||
|
||||
fmt.Println(util.Mod("asdsadasdasdas", 9999999))
|
||||
fmt.Println(util.Crc32Mode("asdsadasdasdas", 9999999))
|
||||
fmt.Println(Mod("asdsadasdasdas", 9999999))
|
||||
fmt.Println(Crc32Mode("asdsadasdasdas", 9999999))
|
||||
}
|
||||
@@ -7,7 +7,6 @@
|
||||
package array
|
||||
|
||||
import (
|
||||
"Go-Tool/util/array"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
@@ -34,30 +33,30 @@ var (
|
||||
|
||||
func TestBool(t *testing.T) {
|
||||
fmt.Print("\n\nContains\n\n")
|
||||
fmt.Println(array.Contains(mm, mm))
|
||||
fmt.Println(array.Contains(mm, mm1))
|
||||
fmt.Println(array.Contains(mm, MM{
|
||||
fmt.Println(Contains(mm, mm))
|
||||
fmt.Println(Contains(mm, mm1))
|
||||
fmt.Println(Contains(mm, MM{
|
||||
A: 1,
|
||||
B: "2",
|
||||
}))
|
||||
fmt.Print("\n\nNotContains\n\n")
|
||||
fmt.Println(array.NotContains(mm, mm))
|
||||
fmt.Println(array.NotContains(mm, mm1))
|
||||
fmt.Println(array.NotContains(mm, MM{
|
||||
fmt.Println(NotContains(mm, mm))
|
||||
fmt.Println(NotContains(mm, mm1))
|
||||
fmt.Println(NotContains(mm, MM{
|
||||
A: 1,
|
||||
B: "2",
|
||||
}))
|
||||
fmt.Print("\n\nIsSameList\n\n")
|
||||
fmt.Println(array.IsSameList(mm, mm))
|
||||
fmt.Println(array.IsSameList(mm, nn1))
|
||||
fmt.Println(array.IsSameList(mm, mm2))
|
||||
fmt.Println(array.IsSameList(mm, nn))
|
||||
fmt.Println(IsSameList(mm, mm))
|
||||
fmt.Println(IsSameList(mm, nn1))
|
||||
fmt.Println(IsSameList(mm, mm2))
|
||||
fmt.Println(IsSameList(mm, nn))
|
||||
|
||||
fmt.Print("\n\nIsSubSet\n\n")
|
||||
fmt.Println(array.IsSubSet(mm, mm))
|
||||
fmt.Println(array.IsSubSet(mm, mm1))
|
||||
fmt.Println(array.IsSubSet(mm, mm2))
|
||||
fmt.Println(array.IsSubSet(mm, nn))
|
||||
fmt.Println(IsSubSet(mm, mm))
|
||||
fmt.Println(IsSubSet(mm, mm1))
|
||||
fmt.Println(IsSubSet(mm, mm2))
|
||||
fmt.Println(IsSubSet(mm, nn))
|
||||
fmt.Printf("\n\n")
|
||||
|
||||
}
|
||||
@@ -92,12 +91,12 @@ func TestJoin(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestEqual(t *testing.T) {
|
||||
DeepCopyIntSlice()
|
||||
DeepCopyIntSlice2()
|
||||
DeepCopyIntSlice11()
|
||||
DeepCopyIntSlice21()
|
||||
}
|
||||
|
||||
func intersection(mm, nn []interface{}) {
|
||||
i1 := array.Intersection(mm, nn)
|
||||
i1 := Intersection(mm, nn)
|
||||
for _, row := range i1 {
|
||||
b, err := json.Marshal(row)
|
||||
fmt.Println(err)
|
||||
@@ -106,7 +105,7 @@ func intersection(mm, nn []interface{}) {
|
||||
}
|
||||
|
||||
func diffSet(mm, nn []interface{}) {
|
||||
i1 := array.DiffSet(mm, nn)
|
||||
i1 := DiffSet(mm, nn)
|
||||
for _, row := range i1 {
|
||||
b, _ := json.Marshal(row)
|
||||
fmt.Print(string(b))
|
||||
@@ -114,22 +113,22 @@ func diffSet(mm, nn []interface{}) {
|
||||
}
|
||||
|
||||
func union(mm, nn []interface{}) {
|
||||
i1 := array.Union(mm, nn)
|
||||
i1 := Union(mm, nn)
|
||||
for _, row := range i1 {
|
||||
b, _ := json.Marshal(row)
|
||||
fmt.Print(string(b))
|
||||
}
|
||||
}
|
||||
|
||||
func DeepCopyIntSlice() {
|
||||
func DeepCopyIntSlice11() {
|
||||
src := []int{1, 2, 3, 4, 5, 6}
|
||||
src1 := array.DeepCopyIntSlice(src)
|
||||
src1 := DeepCopyIntSlice(src)
|
||||
fmt.Println(&src == &src1)
|
||||
}
|
||||
|
||||
func DeepCopyIntSlice2() {
|
||||
func DeepCopyIntSlice21() {
|
||||
src := [][]int{{1, 2, 3}, {4, 5, 6}}
|
||||
src1 := array.DeepCopyIntSlice2(src)
|
||||
src1 := DeepCopyIntSlice2(src)
|
||||
fmt.Println(&src == &src1)
|
||||
}
|
||||
|
||||
@@ -4,17 +4,16 @@
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
package deepSearchTest
|
||||
package deepSearch
|
||||
|
||||
import (
|
||||
"Go-Tool/util/deepSearch"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestOriginDeepSearch(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchNum([]deepSearch.ItemValue{
|
||||
srv := NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchNum([]ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
@@ -42,8 +41,8 @@ func TestOriginDeepSearch(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeepSearch(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValue([]deepSearch.ItemValue{
|
||||
srv := NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValue([]ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
@@ -71,8 +70,8 @@ func TestDeepSearch(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeepSearchLimitNum(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueLimitNum([]deepSearch.ItemValue{
|
||||
srv := NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueLimitNum([]ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
@@ -99,8 +98,8 @@ func TestDeepSearchLimitNum(t *testing.T) {
|
||||
}
|
||||
}
|
||||
func TestDeepSearchInSection(t *testing.T) {
|
||||
srv := deepSearch.NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueInSection([]deepSearch.ItemValue{
|
||||
srv := NewDeepSearch()
|
||||
itemGroup := srv.GetItemMatchValueInSection([]ItemValue{
|
||||
{
|
||||
ItemId: 1,
|
||||
ItemValue: 1,
|
||||
@@ -7,22 +7,21 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"Go-Tool/util/file"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
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) {
|
||||
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) {
|
||||
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)
|
||||
var testMode JsonTestMode
|
||||
_ = json.Unmarshal([]byte(content), &testMode)
|
||||
@@ -7,7 +7,6 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"Go-Tool/util/file"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
@@ -21,7 +20,7 @@ var (
|
||||
)
|
||||
|
||||
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 {
|
||||
fmt.Print(row)
|
||||
@@ -29,7 +28,7 @@ func TestGetAllFileNameFromDir(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 {
|
||||
fmt.Print(fmt.Sprint(row, "\n\n"))
|
||||
@@ -37,7 +36,7 @@ func TestGetAllEmptyDir(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 {
|
||||
fmt.Print(row)
|
||||
@@ -45,7 +44,7 @@ func TestGetAllDir(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 {
|
||||
fmt.Print(row)
|
||||
@@ -4,7 +4,7 @@
|
||||
* @Description:背包道具
|
||||
*/
|
||||
|
||||
package KnapsackOptimization
|
||||
package knapsackOptimization
|
||||
|
||||
type BagItem struct {
|
||||
Value int //道具价值
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
* 参考地址:https://blog.csdn.net/chanmufeng/article/details/82955730
|
||||
*/
|
||||
|
||||
package KnapsackOptimization
|
||||
package knapsackOptimization
|
||||
|
||||
type KnapsackOptimization struct {
|
||||
BagCapacity int //背包的总容量上限
|
||||
+11
-12
@@ -6,43 +6,42 @@
|
||||
* 参考地址:https://blog.csdn.net/chanmufeng/article/details/82955730
|
||||
*/
|
||||
|
||||
package KnapsackOptimizationTest
|
||||
package knapsackOptimization
|
||||
|
||||
import (
|
||||
"Go-Tool/util/KnapsackOptimization"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestKnapsackOptimizationUtil(t *testing.T) {
|
||||
bagItem := make([]*KnapsackOptimization.BagItem, 0)
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem := make([]*BagItem, 0)
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 3,
|
||||
Weight: 2,
|
||||
})
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 3,
|
||||
Weight: 3,
|
||||
})
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 4,
|
||||
Weight: 4,
|
||||
})
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 5,
|
||||
Weight: 5,
|
||||
})
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 6,
|
||||
Weight: 2,
|
||||
})
|
||||
bagItem = append(bagItem, &KnapsackOptimization.BagItem{
|
||||
bagItem = append(bagItem, &BagItem{
|
||||
Value: 7,
|
||||
Weight: 2,
|
||||
})
|
||||
cmd := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12)
|
||||
cmd1 := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12)
|
||||
cmd2 := KnapsackOptimization.NewKnapsackOptimization(bagItem, 12)
|
||||
cmd := NewKnapsackOptimization(bagItem, 12)
|
||||
cmd1 := NewKnapsackOptimization(bagItem, 12)
|
||||
cmd2 := NewKnapsackOptimization(bagItem, 12)
|
||||
fmt.Print(cmd.OptimizePackageByRecursion()) //通过递归解背包问题
|
||||
|
||||
fmt.Println(cmd1.KnapsackCycle()) //通过逆序解背包问题.
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
package KnapsackOptimization
|
||||
package knapsackOptimization
|
||||
|
||||
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
|
||||
|
||||
import (
|
||||
"Go-Tool/util/rand"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
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 {
|
||||
fmt.Println(strconv.Itoa(r))
|
||||
}
|
||||
@@ -24,9 +23,9 @@ func TestRandByWeight(t *testing.T) {
|
||||
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 {
|
||||
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 _, r1 := range r {
|
||||
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 {
|
||||
fmt.Println(strconv.Itoa(r))
|
||||
}
|
||||
@@ -7,19 +7,18 @@
|
||||
package rand
|
||||
|
||||
import (
|
||||
"Go-Tool/util/rand"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRand(t *testing.T) {
|
||||
fmt.Printf(strconv.Itoa(rand.GetRandInt(100, 2000)))
|
||||
for _, r := range rand.GetRandIntNoRepeat(10, 100, 200) {
|
||||
fmt.Printf(strconv.Itoa(GetRandInt(100, 2000)))
|
||||
for _, r := range GetRandIntNoRepeat(10, 100, 200) {
|
||||
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))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* @Author : huangzj
|
||||
* @Time : 2020/8/18 14:11
|
||||
* @Description:Lomuto划分,找到一个数组中第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,或者大于数组长度")
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
import (
|
||||
set2 "Go-Tool/util/set"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSet(t *testing.T) {
|
||||
set := new(set2.Set)
|
||||
set := new(Set)
|
||||
set.Add(1)
|
||||
set.Add(2)
|
||||
set.Add("123")
|
||||
@@ -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 ")
|
||||
}
|
||||
@@ -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()))
|
||||
}
|
||||
@@ -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
|
||||
|
||||
import (
|
||||
"Go-Tool/util/timed"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTimeStampUtil(t *testing.T) {
|
||||
fmt.Print("\n\n")
|
||||
fmt.Println(timed.GetNowHourUnix())
|
||||
fmt.Println(GetNowHourUnix())
|
||||
|
||||
fmt.Print("\n\n")
|
||||
fmt.Println(timed.GetNowUnix())
|
||||
fmt.Println(GetNowUnix())
|
||||
|
||||
fmt.Print("\n\n")
|
||||
fmt.Println(timed.GetZeroHourUnix())
|
||||
fmt.Println(GetZeroHourUnix())
|
||||
|
||||
fmt.Print("\n\n")
|
||||
fmt.Println(timed.GetNowYearUnix())
|
||||
fmt.Println(GetNowYearUnix())
|
||||
|
||||
fmt.Print("\n\n")
|
||||
fmt.Println(timed.GetNowMonthUnix())
|
||||
fmt.Println(GetNowMonthUnix())
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user