C#,大规模图(Large Graph)的均匀成本搜索之迪杰斯特拉(Dijkstra)算法与源代码

均匀成本搜索

均匀成本搜索迪杰斯特拉算法的变体。这里,我们不是将所有顶点插入到一个优先级队列中,而是只插入源,然后在需要时一个接一个地插入。在每一步中,我们检查项目是否已经在优先级队列中(使用访问数组)。如果是,我们执行减少键,否则我们插入它。 这个 Dijkstra 的变体对于无限图和那些太大而无法在内存中表示的图很有用。均匀成本搜索主要用于人工智能

均匀成本搜索类似于迪杰斯特拉算法。在该算法中,从起始状态开始,我们将访问相邻的状态,并将选择代价最小的状态,然后我们将从所有未访问的状态和访问状态的相邻状态中选择下一个代价最小的状态,这样,我们将尝试到达目标状态(注意,我们不会继续通过目标状态的路径),即使我们到达目标状态,我们也将继续搜索其他可能的路径(如果有多个目标)。我们将保持一个优先级队列,该队列将给出来自被访问状态的所有相邻状态中成本最低的下一个状态。


2 均匀成本搜索源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static class LargeGraph
    {
        private static List<List<int>> graph = new List<List<int>>();

        // Tuple 多元组数据
        private static Dictionary<Tuple<int, int>, int> cost = new Dictionary<Tuple<int, int>, int>();

        public static List<int> Uniform_Cost_Search(List<int> goal, int start)
        {
            List<int> answer = new List<int>();

            List<Tuple<int, int>> queue = new List<Tuple<int, int>>();

            for (int i = 0; i < goal.Count; i++)
            {
                answer.Add(int.MaxValue);
            }

            queue.Add(new Tuple<int, int>(0, start));

            Dictionary<int, int> visited = new Dictionary<int, int>();

            int count = 0;

            while (queue.Count > 0)
            {
                Tuple<int, int> q = queue[0];
                Tuple<int, int> p = new Tuple<int, int>(-q.Item1, q.Item2);

                queue.RemoveAt(0);

                if (goal.Contains(p.Item2))
                {
                    int index = goal.IndexOf(p.Item2);

                    if (answer[index] == int.MaxValue)
                    {
                        count++;
                    }
                    if (answer[index] > p.Item1)
                    {
                        answer[index] = p.Item1;
                    }
                    queue.RemoveAt(0);

                    if (count == goal.Count)
                    {
                        return answer;
                    }
                }
                if (!visited.ContainsKey(p.Item2))
                {
                    for (int i = 0; i < graph[p.Item2].Count; i++)
                    {
                        queue.Add(new Tuple<int, int>((p.Item1 + (cost.ContainsKey(new Tuple<int, int>(p.Item2, graph[p.Item2][i])) ? cost[new Tuple<int, int>(p.Item2, graph[p.Item2][i])] : 0)) * -1,
                        graph[p.Item2][i]));
                    }
                }
                visited[p.Item2] = 1;
            }

            return answer;
        }
    }
}

3 代码格式

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static class LargeGraph
    {
        private static List<List<int>> graph = new List<List<int>>();

        // Tuple 多元组数据
        private static Dictionary<Tuple<int, int>, int> cost = new Dictionary<Tuple<int, int>, int>();

        public static List<int> Uniform_Cost_Search(List<int> goal, int start)
        {
            List<int> answer = new List<int>();

            List<Tuple<int, int>> queue = new List<Tuple<int, int>>();

            for (int i = 0; i < goal.Count; i++)
            {
                answer.Add(int.MaxValue);
            }

            queue.Add(new Tuple<int, int>(0, start));

            Dictionary<int, int> visited = new Dictionary<int, int>();

            int count = 0;

            while (queue.Count > 0)
            {
                Tuple<int, int> q = queue[0];
                Tuple<int, int> p = new Tuple<int, int>(-q.Item1, q.Item2);

                queue.RemoveAt(0);

                if (goal.Contains(p.Item2))
                {
                    int index = goal.IndexOf(p.Item2);

                    if (answer[index] == int.MaxValue)
                    {
                        count++;
                    }
                    if (answer[index] > p.Item1)
                    {
                        answer[index] = p.Item1;
                    }
                    queue.RemoveAt(0);

                    if (count == goal.Count)
                    {
                        return answer;
                    }
                }
                if (!visited.ContainsKey(p.Item2))
                {
                    for (int i = 0; i < graph[p.Item2].Count; i++)
                    {
                        queue.Add(new Tuple<int, int>((p.Item1 + (cost.ContainsKey(new Tuple<int, int>(p.Item2, graph[p.Item2][i])) ? cost[new Tuple<int, int>(p.Item2, graph[p.Item2][i])] : 0)) * -1,
                        graph[p.Item2][i]));
                    }
                }
                visited[p.Item2] = 1;
            }

            return answer;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/401470.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flink反压

flink反压&#xff08;backpressure&#xff09;&#xff0c;简单来说就是当接收方的接收速率低于发送方的发送速率&#xff0c;这时如果不做处理就会导致接收方的数据积压越来越多直到内存溢出&#xff0c;所以此时需要一个机制来根据接收方的状态反过来限制发送方的发送速率&…

精英ECS Z97-MACHINE V1.0 BIOS MX25L6406E

官网上的两个BIOS我都无法亮机&#xff0c;这是我保存出来的BIOS&#xff0c;不知道是否能使用五代的处理器 官网&#xff1a;Z97-MACHINE&#xff5c;Motherboard&#xff5c;产品&#xff5c;ECS 精英电脑 国外老哥的看法&#xff1a;ECS Z97-MACHINE Closer Look: The BIO…

手拉手助成长社会融合实践活动之新春送温暖

2月21日上午来自合肥市第四十五中学橡树湾校区七(15)中队、共青团合肥市第六中学2023级36班委员会的40多名同学&#xff0c;带来了龙年的礼物看望陪伴合肥市庐阳区为民社会工作服务中心幸福小院的兄弟姐妹。 大家详细地了解了幸福小院孩子们学习、康复和社会实践及能力提升情况…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

通用性技术底座AI大模型与各行业专用性AI小模型搭建(第二篇)

五、小模型架构选择问题 在选择行业专用AI小模型的架构时&#xff0c;需要考虑以下几个关键因素&#xff1a; 1. **任务类型**&#xff1a; - 不同的任务类型&#xff08;如分类、回归、序列生成、图像识别等&#xff09;对应着不同的模型结构。例如&#xff0c;文本分类问…

Ansible cron模块 适用于管理计划任务 设置多个计划任务

目录 选项添加一个计划任务检查是否添加成功删除计划任务检查是否执行成功 选项 其使用的语法跟我们的crontab文件中的语法一致&#xff0c;同时&#xff0c;可以指定以下选项&#xff1a; day #日应该运行的工作( 1-31, , /2, ) hour # 小时 ( 0-23, , /2, ) minute #分钟( 0…

Leetcode 26-30题

删除有序数组中的重复项 给定一个有序数组&#xff0c;要求原地删除重复出现的元素&#xff0c;返回删除后的数组的长度。 这里的原地删除其实可以这样表示&#xff0c;用双指针从前往后扫一遍&#xff0c;遇到新的没出现过的元素就放到前面去&#xff0c;就可以实现删除后的数…

【杭州游戏业:创业热土,政策先行】

在前面的文章中&#xff0c;我们探讨了上海、北京、广州、深圳等城市的游戏产业现状。现在&#xff0c;我们切换视角&#xff0c;来看看另一个游戏创业热土——杭州的发展情况 最近第19届亚运会在杭州举办&#xff0c;本次亚运会上&#xff0c;电子竞技首次获准列为正式比赛项…

了解 Kubernetes

1 Kubernetes概述 1.1 k8s是什么 K8S 的全称为 Kubernetes (K12345678S)&#xff0c;PS&#xff1a;“嘛&#xff0c;写全称也太累了吧&#xff0c;不如整个缩写” 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开…

Manacher算法和扩展kmp

Manacher算法 a情况 b情况 具体例子 c情况 总结 代码 #include<iostream> #include<algorithm> #include<string> #include<cmath>using namespace std; const int N 1.1e7 1; char ss[N << 1]; int p[N << 1]; int n; void manacherss…

vue中使用AraleQRCode生成二维码

vue中使用AraleQRCode生成二维码 问题背景 本文介绍vue中生成二维码的一种方案&#xff0c;使用AraleQRCode来实现。 问题分析 &#xff08;1&#xff09;安装对应的依赖包 npm i arale-qrcode --save &#xff08;2&#xff09;完整代码如下: <template><!-…

深入解析SDRAM:从工作原理到实际应用

深入解析SDRAM&#xff1a;从工作原理到实际应用 在众多内存技术中&#xff0c;同步动态随机访问存储器&#xff08;SDRAM&#xff09;因其出色的性能和广泛的应用而备受关注。本文将从SDRAM的工作原理入手&#xff0c;探讨其性能优化策略和在现代电子设备中的应用。 SDRAM工作…

多系统集成分析——WMS系统与PLM、ERP、MES、智库、WCS、AGV、OA系统的关联

多系统集成分析——WMS系统与PLM、ERP、MES、智库、WCS、AGV、OA系统的关联 原创 西游暖暖 白话聊IT 2024-02-19 00:06 天津 首先分享一个已上线的智能工厂架构图&#xff1a;智能制造全场景下&#xff0c;将WMS定位于不仅是仓储执行管理系统&#xff0c;更作为连接全方案的“…

企业数据资产入表路径及方法完整解析

源自&#xff1a;架构老人 “人工智能技术与咨询” 发布 01政策、背景、趋势 一、数字资源如表国家政策 为规范企业数据资源相关会计处理&#xff0c;强化相关会计信息披露&#xff0c;财政部制定印发了《企业数据资源相关会计处理暂行规定》&#xff08;以下简称《暂行规…

JVM工作原理与实战(三十九):G1垃圾回收器原理

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、G1垃圾回收器 1.G1垃圾回收器执行流程 二、年轻代回收 1.年轻代回收原理 2.卡表(Card Table) 3.记忆集的生成流程 4.年轻代回收的详细步骤 5.G1年轻代回收核心技术总结 三、…

超声波清洗机应该怎么选?这几款超声波清洗机错后悔!

科技让我们的生活变得方便了许多&#xff0c;比如&#xff0c;自从有了超声波清洗机之后&#xff0c;有些人就改变了眼镜必须要手洗的想法&#xff0c;许多研究也证明&#xff0c;单靠手洗是无法眼镜内缝隙中的污渍彻底清洗干净的&#xff0c;一台专门的超声波清洗机就可以减轻…

JavaSprintBoot中一些运维方面的知识

1.配置文件四级分类 例如以下yml配置文件&#xff0c;权限一共有四级&#xff0c;高等级覆盖低等级并叠加&#xff08;权限向下兼容&#xff09; 2.自定义配置文件 可以自定义配置文件的名称&#xff0c;因为实际开发环境中可能不会就简单的叫做application.yml之类的&#x…

48 slab 的实现

前言 这里说的是 内核中分配小对象的一种内存分配方式 slab 呵呵 经典程度不必多说了, 内核使用的大多数数据结构 基本上是基于 slab 进行内存分配的 这里 我们来看一下 slab 如何分配对象 几个分配层级, c->free_list, c->page, c->partial, new_slab 1. 先…

C#上位机与三菱PLC的通信08---开发自己的通讯库(A-1E版)

1、A-1E报文回顾 具体细节请看&#xff1a; C#上位机与三菱PLC的通信03--MC协议之A-1E报文解析 C#上位机与三菱PLC的通信04--MC协议之A-1E报文测试 2、为何要开发自己的通讯库 前面使用了第3方的通讯库实现了与三菱PLC的通讯&#xff0c;实现了数据的读写&#xff0c;对于通…

Maven私服搭建Nexus3

第一部分&#xff1a;仓库部署 下载地址&#xff1a;https://help.sonatype.com/en/download.html 备用下载链接&#xff0c;部分已经失效了 解压后会有两个文件夹&#xff1a; nexus-3.20.1-01 sonatype-work 访问地址配置路径 \nexus-3.20.1-01\bin\nexus.vmoptions -Xms1…
最新文章