diff --git a/readme.md b/readme.md index 5559296..61d5511 100644 --- a/readme.md +++ b/readme.md @@ -42,6 +42,7 @@ 2020/8/6: 添加求背包问题最优解三种方式(KnapsackOptimizationUtil.go)及其单测类,添加求背包问题最优解过程路径(KnapsackSearchAnswerUtil.go)及其单测类.添加背包问题的readme相关说明 +2020/8/18:修改单测位置,添加lomuto查找第k小元素算法代码及其单测(分治法) # mod vendor模式加载包 diff --git a/test/KnapsackOptimizationTest/KnapsackSearchAnswerUtil_test.go b/test/KnapsackOptimizationTest/KnapsackSearchAnswerUtil_test.go deleted file mode 100644 index 6a9d64c..0000000 --- a/test/KnapsackOptimizationTest/KnapsackSearchAnswerUtil_test.go +++ /dev/null @@ -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())) -} diff --git a/test/timed/TestTimeIntervalUtil_test.go b/test/timed/TestTimeIntervalUtil_test.go deleted file mode 100644 index 93613b2..0000000 --- a/test/timed/TestTimeIntervalUtil_test.go +++ /dev/null @@ -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 ") -} diff --git a/test/timed/TimeCompareUtil_test.go b/test/timed/TimeCompareUtil_test.go deleted file mode 100644 index 722a49b..0000000 --- a/test/timed/TimeCompareUtil_test.go +++ /dev/null @@ -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())) -} diff --git a/test/timed/TimeFormatUtil_test.go b/test/timed/TimeFormatUtil_test.go deleted file mode 100644 index 1beacea..0000000 --- a/test/timed/TimeFormatUtil_test.go +++ /dev/null @@ -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())) -} diff --git a/test/HashMod_test.go b/util/HashMod_test.go similarity index 50% rename from test/HashMod_test.go rename to util/HashMod_test.go index 41d7c03..efd981f 100644 --- a/test/HashMod_test.go +++ b/util/HashMod_test.go @@ -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)) } diff --git a/test/array/ArrayUtil_test.go b/util/array/ArrayUtil_test.go similarity index 72% rename from test/array/ArrayUtil_test.go rename to util/array/ArrayUtil_test.go index 9f7c6a8..90cbebe 100644 --- a/test/array/ArrayUtil_test.go +++ b/util/array/ArrayUtil_test.go @@ -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) } diff --git a/test/deepSearchTest/DeepSearch_test.go b/util/deepSearch/DeepSearch_test.go similarity index 79% rename from test/deepSearchTest/DeepSearch_test.go rename to util/deepSearch/DeepSearch_test.go index bdbb213..80a2bec 100644 --- a/test/deepSearchTest/DeepSearch_test.go +++ b/util/deepSearch/DeepSearch_test.go @@ -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, diff --git a/test/file/FileReadTool_test.go b/util/file/FileReadTool_test.go similarity index 77% rename from test/file/FileReadTool_test.go rename to util/file/FileReadTool_test.go index 5f609e2..d2a0aaa 100644 --- a/test/file/FileReadTool_test.go +++ b/util/file/FileReadTool_test.go @@ -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) diff --git a/test/file/FileUtil_test.go b/util/file/FileUtil_test.go similarity index 73% rename from test/file/FileUtil_test.go rename to util/file/FileUtil_test.go index ae7288c..b1baae5 100644 --- a/test/file/FileUtil_test.go +++ b/util/file/FileUtil_test.go @@ -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) diff --git a/test/file/FileWriteTool_test.go b/util/file/FileWriteTool_test.go similarity index 100% rename from test/file/FileWriteTool_test.go rename to util/file/FileWriteTool_test.go diff --git a/test/file/json_file_test_mode.json b/util/file/json_file_test_mode.json similarity index 100% rename from test/file/json_file_test_mode.json rename to util/file/json_file_test_mode.json diff --git a/util/KnapsackOptimization/BagItem.go b/util/knapsackOptimization/BagItem.go similarity index 85% rename from util/KnapsackOptimization/BagItem.go rename to util/knapsackOptimization/BagItem.go index 8bd4d9c..d7b3d04 100644 --- a/util/KnapsackOptimization/BagItem.go +++ b/util/knapsackOptimization/BagItem.go @@ -4,7 +4,7 @@ * @Description:背包道具 */ -package KnapsackOptimization +package knapsackOptimization type BagItem struct { Value int //道具价值 diff --git a/util/KnapsackOptimization/KnapsackOptimizationUtil.go b/util/knapsackOptimization/KnapsackOptimizationUtil.go similarity index 99% rename from util/KnapsackOptimization/KnapsackOptimizationUtil.go rename to util/knapsackOptimization/KnapsackOptimizationUtil.go index cfbfd56..08d5e3b 100644 --- a/util/KnapsackOptimization/KnapsackOptimizationUtil.go +++ b/util/knapsackOptimization/KnapsackOptimizationUtil.go @@ -6,7 +6,7 @@ * 参考地址:https://blog.csdn.net/chanmufeng/article/details/82955730 */ -package KnapsackOptimization +package knapsackOptimization type KnapsackOptimization struct { BagCapacity int //背包的总容量上限 diff --git a/test/KnapsackOptimizationTest/KnapsackOptimizationUtil_test.go b/util/knapsackOptimization/KnapsackOptimizationUtil_test.go similarity index 58% rename from test/KnapsackOptimizationTest/KnapsackOptimizationUtil_test.go rename to util/knapsackOptimization/KnapsackOptimizationUtil_test.go index 0ee4755..1a0dd0c 100644 --- a/test/KnapsackOptimizationTest/KnapsackOptimizationUtil_test.go +++ b/util/knapsackOptimization/KnapsackOptimizationUtil_test.go @@ -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()) //通过逆序解背包问题. diff --git a/util/KnapsackOptimization/KnapsackSearchAnswerUtil.go b/util/knapsackOptimization/KnapsackSearchAnswerUtil.go similarity index 99% rename from util/KnapsackOptimization/KnapsackSearchAnswerUtil.go rename to util/knapsackOptimization/KnapsackSearchAnswerUtil.go index 749a00f..a7882fd 100644 --- a/util/KnapsackOptimization/KnapsackSearchAnswerUtil.go +++ b/util/knapsackOptimization/KnapsackSearchAnswerUtil.go @@ -4,7 +4,7 @@ * @Description: */ -package KnapsackOptimization +package knapsackOptimization import "fmt" diff --git a/util/knapsackOptimization/KnapsackSearchAnswerUtil_test.go b/util/knapsackOptimization/KnapsackSearchAnswerUtil_test.go new file mode 100644 index 0000000..6abdb23 --- /dev/null +++ b/util/knapsackOptimization/KnapsackSearchAnswerUtil_test.go @@ -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())) +} diff --git a/util/KnapsackOptimization/readme.md b/util/knapsackOptimization/readme.md similarity index 100% rename from util/KnapsackOptimization/readme.md rename to util/knapsackOptimization/readme.md diff --git a/test/rand/RandByWeight_test.go b/util/rand/RandByWeight_test.go similarity index 54% rename from test/rand/RandByWeight_test.go rename to util/rand/RandByWeight_test.go index 79c5f7f..01b876d 100644 --- a/test/rand/RandByWeight_test.go +++ b/util/rand/RandByWeight_test.go @@ -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)) } diff --git a/test/rand/Rand_test.go b/util/rand/Rand_test.go similarity index 50% rename from test/rand/Rand_test.go rename to util/rand/Rand_test.go index cc05e30..b043058 100644 --- a/test/rand/Rand_test.go +++ b/util/rand/Rand_test.go @@ -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)) } } diff --git a/util/search/LomutoPartition.go b/util/search/LomutoPartition.go new file mode 100644 index 0000000..ff6067e --- /dev/null +++ b/util/search/LomutoPartition.go @@ -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,或者大于数组长度") + } +} diff --git a/util/search/LomutoPartition_test.go b/util/search/LomutoPartition_test.go new file mode 100644 index 0000000..c18c717 --- /dev/null +++ b/util/search/LomutoPartition_test.go @@ -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() + } + +} diff --git a/test/set/Set_test.go b/util/set/Set_test.go similarity index 89% rename from test/set/Set_test.go rename to util/set/Set_test.go index f092be5..0d4d61d 100644 --- a/test/set/Set_test.go +++ b/util/set/Set_test.go @@ -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") diff --git a/util/timed/TestTimeIntervalUtil_test.go b/util/timed/TestTimeIntervalUtil_test.go new file mode 100644 index 0000000..3155017 --- /dev/null +++ b/util/timed/TestTimeIntervalUtil_test.go @@ -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 ") +} diff --git a/util/timed/TimeCompareUtil_test.go b/util/timed/TimeCompareUtil_test.go new file mode 100644 index 0000000..1833ad7 --- /dev/null +++ b/util/timed/TimeCompareUtil_test.go @@ -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())) +} diff --git a/util/timed/TimeFormatUtil_test.go b/util/timed/TimeFormatUtil_test.go new file mode 100644 index 0000000..4b1f4e2 --- /dev/null +++ b/util/timed/TimeFormatUtil_test.go @@ -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())) +} diff --git a/test/timed/TimeStampUtil_test.go b/util/timed/TimeStampUtil_test.go similarity index 56% rename from test/timed/TimeStampUtil_test.go rename to util/timed/TimeStampUtil_test.go index 99118dd..303c831 100644 --- a/test/timed/TimeStampUtil_test.go +++ b/util/timed/TimeStampUtil_test.go @@ -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()) }