三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

做网站建设的合同ui设计培训项目

做网站建设的合同ui设计培训项目 做网站建设的合同,ui设计培训项目,物理机安装虚拟机做网站好处,温州专业手机网站制作多少钱项目结构: /* # 版权所有 2026 涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE … 项目结构:/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:15 # User : geovindu # Product : GoLand # Project : goalgorithms # File : const.go */ package commonconst (CaratDecimal = 3MoneyDecimal = 2EPS = 1e-6 )/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:15 # User : geovindu # Product : GoLand # Project : goalgorithms # File : error.go */ package commonimport "fmt"// 基础业务错误 type GemBaseError struct {Msg string }func (e *GemBaseError) Error() string {return fmt.Sprintf("珠宝配石异常: %s", e.Msg) }// 参数非法 func NewGemParamInvalidError(msg string) error {return GemBaseError{Msg: fmt.Sprintf("参数非法: %s", msg)} }// 预算为0/负数 func NewBudgetZeroError() error {return GemBaseError{Msg: "预算必须大于0"} }// 库存为空 func NewStockEmptyError() error {return GemBaseError{Msg: "宝石库存为空,无法配石"} }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:16 # User : geovindu # Product : GoLand # Project : goalgorithms # File : util.go */ package commonimport "math"// 克拉保留3位小数 func RoundCarat(val float64) float64 {mul := math.Pow10(CaratDecimal)return math.Round(val*mul) / mul }// 金额保留2位小数 func RoundMoney(val float64) float64 {mul := math.Pow10(MoneyDecimal)return math.Round(val*mul) / mul }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:16 # User : geovindu # Product : GoLand # Project : goalgorithms # File : gem_entity.go */ package entityimport "goalgorithms/greedy/common"// GemStone 库存宝石实体(映射数据库) type GemStone struct {StoneName string `json:"stone_name"`TotalCarat float64 `json:"total_carat"`BatchPrice float64 `json:"batch_price"` }// UnitCaratValue 单位预算对应克拉(性价比排序依据) func (g *GemStone) UnitCaratValue() float64 {return g.TotalCarat / g.BatchPrice }// GemAllocateItem 单款宝石配石明细 type GemAllocateItem struct {StoneName string `json:"stone_name"`UseCarat float64 `json:"use_carat"`UseCost float64 `json:"use_cost"` }// GemAllocateResultDTO 对外标准返回DTO,对齐Python输出结构 type GemAllocateResultDTO struct {BudgetTotal float64 `json:"预算总额"`CostActual float64 `json:"实际花费"`BudgetRemain float64 `json:"剩余预算"`TotalCarat float64 `json:"总匹配克拉"`DetailList []GemAllocateItem `json:"选用裸石明细"` }// ToMap 转map用于打印输出,和Python to_dict完全一致 func (dto *GemAllocateResultDTO) ToMap() map[string]interface{} {detail := make([]map[string]interface{}, 0, len(dto.DetailList))for _, item := range dto.DetailList {detail = append(detail, map[string]interface{}{"宝石名称": item.StoneName,"取用克拉": common.RoundCarat(item.UseCarat),"花费金额": common.RoundMoney(item.UseCost),})}return map[string]interface{}{"预算总额": common.RoundMoney(dto.BudgetTotal),"实际花费": common.RoundMoney(dto.CostActual),"剩余预算": common.RoundMoney(dto.BudgetRemain),"总匹配克拉": common.RoundCarat(dto.TotalCarat),"选用裸石明细": detail,} }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:17 # User : geovindu # Product : GoLand # Project : goalgorithms # File : base_repo.go */ package repositoryimport "goalgorithms/greedy/entity"// BaseGemRepository 仓储抽象接口,可替换内存/Mysql/Redis type BaseGemRepository interface {AddGem(gem entity.GemStone)GetAllGems() []entity.GemStoneClearAll()Count() int }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:17 # User : geovindu # Product : GoLand # Project : goalgorithms # File : memory_repo.go */ package repositoryimport "goalgorithms/greedy/entity"type GemMemoryRepository struct {storage []entity.GemStone }func NewGemMemoryRepository() *GemMemoryRepository {return GemMemoryRepository{storage: make([]entity.GemStone, 0),} }func (r *GemMemoryRepository) AddGem(gem entity.GemStone) {r.storage = append(r.storage, gem) }func (r *GemMemoryRepository) GetAllGems() []entity.GemStone {copyList := make([]entity.GemStone, len(r.storage))copy(copyList, r.storage)return copyList }func (r *GemMemoryRepository) ClearAll() {r.storage = r.storage[:0] }func (r *GemMemoryRepository) Count() int {return len(r.storage) }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:18 # User : geovindu # Product : GoLand # Project : goalgorithms # File : sort_strategy.go */ package algorithmimport "goalgorithms/greedy/entity"// BaseSortStrategy 排序策略抽象,策略模式可扩展 type BaseSortStrategy interface {Sort(gemList []entity.GemStone) []entity.GemStone }// UnitValueDescStrategy 性价比从高到低(默认) type UnitValueDescStrategy struct{}func NewUnitValueDescStrategy() *UnitValueDescStrategy {return UnitValueDescStrategy{} }func (s *UnitValueDescStrategy) Sort(gemList []entity.GemStone) []entity.GemStone {list := make([]entity.GemStone, len(gemList))copy(list, gemList)for i := 0; i len(list); i++ {for j := i + 1; j len(list); j++ {if list[i].UnitCaratValue() list[j].UnitCaratValue() {list[i], list[j] = list[j], list[i]}}}return list }// MaxCaratDescStrategy 扩展策略:优先大克拉 type MaxCaratDescStrategy struct{}func NewMaxCaratDescStrategy() *MaxCaratDescStrategy {return MaxCaratDescStrategy{} }func (s *MaxCaratDescStrategy) Sort(gemList []entity.GemStone) []entity.GemStone {list := make([]entity.GemStone, len(gemList))copy(list, gemList)for i := 0; i len(list); i++ {for j := i + 1; j len(list); j++ {if list[i].TotalCarat list[j].TotalCarat {list[i], list[j] = list[j], list[i]}}}return list }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:19 # User : geovindu # Product : GoLand # Project : goalgorithms # File : fraction_greedy.go */ package algorithmimport ("goalgorithms/greedy/common""goalgorithms/greedy/entity" )type GemFractionGreedy struct {sortStrategy BaseSortStrategy }// NewGemFractionGreedy 构造,默认性价比排序策略 func NewGemFractionGreedy(strategy ...BaseSortStrategy) *GemFractionGreedy {alg := GemFractionGreedy{}if len(strategy) 0 {alg.sortStrategy = strategy[0]} else {alg.sortStrategy = NewUnitValueDescStrategy()}return alg }func (g *GemFractionGreedy) Calculate(gemList []entity.GemStone, budget float64) ([]entity.GemAllocateItem, error) {if budget = common.EPS {return nil, common.NewBudgetZeroError()}sorted := g.sortStrategy.Sort(gemList)remainBudget := budgetvar result []entity.GemAllocateItemfor _, gem := range sorted {if remainBudget = common.EPS {break}var useCarat, useCost float64if gem.BatchPrice = remainBudget {useCarat = gem.TotalCaratuseCost = gem.BatchPrice} else {ratio := remainBudget / gem.BatchPriceuseCarat = gem.TotalCarat * ratiouseCost = remainBudget}result = append(result, entity.GemAllocateItem{StoneName: gem.StoneName,UseCarat: useCarat,UseCost: useCost,})remainBudget -= useCost}return result, nil }/** @creater: geovindu* @since: 2026-07-20 22:19:46* @LastAuthor: geovindu* @lastTime: 2026-07-20 22:35:59* @文件相对于项目的路径: \goalgorithms\greedy\service\gem_alloc_service.go* @message: geovindu* @IDE: vscode* @Development: node.js 20, vuejs3.0* @package: * @ISO: windows10* @database: mysql 8.0 sql server 2019 postgresSQL 16 * Copyright (c) 2026 by geovindu email:geovindu@163.com, All Rights Reserved.*/ /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:19 # User : geovindu # Product : GoLand # Project : goalgorithms # File : gem_alloc_service.go */ package serviceimport ("goalgorithms/greedy/algorithm""goalgorithms/greedy/common""goalgorithms/greedy/entity""goalgorithms/greedy/repository" )type GemAllocateService struct {repo repository.BaseGemRepositoryalg *algorithm.GemFractionGreedy }// NewGemAllocateService 依赖注入仓储+算法 func NewGemAllocateService(repo repository.BaseGemRepository, alg *algorithm.GemFractionGreedy) *GemAllocateService {return GemAllocateService{repo: repo,alg: alg,} }// AddStoneStock 业务层新增库存,统一参数校验 func (s *GemAllocateService) AddStoneStock(stoneName string, totalCarat, batchPrice float64) error {if totalCarat = common.EPS || batchPrice = common.EPS {return common.NewGemParamInvalidError("克拉、价格必须大于0")}gem := entity.GemStone{StoneName: stoneName,TotalCarat: totalCarat,BatchPrice: batchPrice,}s.repo.AddGem(gem)return nil }// Allocate 完整配石业务流程入口 func (s *GemAllocateService) Allocate(budget float64) (*entity.GemAllocateResultDTO, error) {gemList := s.repo.GetAllGems()if len(gemList) == 0 {return nil, common.NewStockEmptyError()}items, err := s.alg.Calculate(gemList, budget)if err != nil {return nil, err}var totalCarat, totalCost float64for _, item := range items {totalCarat += item.UseCarattotalCost += item.UseCost}remain := budget - totalCostdto := entity.GemAllocateResultDTO{BudgetTotal: budget,CostActual: totalCost,BudgetRemain: remain,TotalCarat: totalCarat,DetailList: items,}return dto, nil }// ClearStock 清空库存复用实例 func (s *GemAllocateService) ClearStock() {s.repo.ClearAll() }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:18 # User : geovindu # Product : GoLand # Project : goalgorithms # File : base_greedy.go */ package repositoryimport "goalgorithms/greedy/entity"// BaseGemGreedy 贪心算法顶层抽象,可替换实现 type BaseGemGreedy interface {Calculate(gemList []entity.GemStone, budget float64) ([]entity.GemAllocateItem, error) }调用:/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Greedy Algorithm 贪心算法 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/7/20 22:26 # User : geovindu # Product : GoLand # Project : goalgorithms # File : greedybll.go */ package bllimport ("encoding/json""fmt""goalgorithms/greedy/algorithm""goalgorithms/greedy/repository""goalgorithms/greedy/service" )func demoCase1() {fmt.Println("===== 案例1|性价比优先配石结果 =====")repo := repository.NewGemMemoryRepository()alg := algorithm.NewGemFractionGreedy() //svc := service.NewGemAllocateService(repo, alg)// 录入库存_ = svc.AddStoneStock("0.8ct白钻", 0.8, 10500)_ = svc.AddStoneStock("0.5ct白钻", 0.5, 6800)_ = svc.AddStoneStock("0.3ct白钻", 0.3, 4200)_ = svc.AddStoneStock("0.2ct粉钻", 0.2, 2800)dto, err := svc.Allocate(18000)if err != nil {fmt.Println("错误:", err)return}out, _ := json.MarshalIndent(dto.ToMap(), "", " ")fmt.Println(string(out)) }func demoCase2() {fmt.Println("\n===== 案例2|优先大克拉配石结果 =====")repo := repository.NewGemMemoryRepository()// 注入大克拉排序策略strategy := algorithm.NewMaxCaratDescStrategy()alg := algorithm.NewGemFractionGreedy(strategy)svc := service.NewGemAllocateService(repo, alg)_ = svc.AddStoneStock("0.8ct白钻", 0.8, 10500)_ = svc.AddStoneStock("0.5ct白钻", 0.5, 6800)dto, err := svc.Allocate(12000)if err != nil {fmt.Println("错误:", err)return}out, _ := json.MarshalIndent(dto.ToMap(), "", " ")fmt.Println(string(out)) }func GreedyMain() {demoCase1()demoCase2() }输出:哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
← 返回列表