将一个单词转换为另一个单词的最短路径

2024-01-30

对于数据结构项目,我必须找到两个单词之间的最短路径(例如"cat" and "dog"),一次仅更改一个字母。我们得到了一个拼字游戏单词列表,用于寻找我们的路径。例如:

cat -> bat -> bet -> bot -> bog -> dog

我已经使用广度优先搜索解决了这个问题,但正在寻找更好的东西(我用特里树表示字典)。

请给我一些关于更有效方法的想法(在速度和内存方面)。一些荒谬和/或具有挑战性的事情是首选。

我问了我的一个朋友(他是大三),他说有no有效解决这个问题。他说当我参加算法课程时我就会明白为什么。对此有何评论?

我们必须从一个词到另一个词。我们不能走cat -> dat -> dag -> dog。我们还必须打印出遍历。


新答案

鉴于最近的更新,您可以尝试使用汉明距离作为启发式的 A*。这是一个可接受的启发式,因为它不会高估距离

旧答案

您可以修改用于计算的动态程序编辑距离 http://en.wikipedia.org/wiki/Levenshtein_distance来获取操作顺序。

编辑:如果字符串的数量恒定,则问题可以在多项式时间内解决。否则,它是 NP 难的(维基百科上都有).. 假设你的朋友正在谈论这个问题是 NP 难的。

编辑:如果你的字符串长度相等,你可以使用汉明距离 http://en.wikipedia.org/wiki/Hamming_distance.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个单词转换为另一个单词的最短路径 的相关文章

  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 如何求小于给定数的最大2次方

    我需要找到小于给定数字的最大 2 次幂 我陷入困境 找不到任何解决方案 Code public class MathPow public int largestPowerOf2 int n int res 2 while res lt n
  • 由周期表元素形成的最大单词的算法

    我想为以下问题场景编写一个算法 根据元素周期表元素的名称 找到可以组成的最大单词 符号如Na Ne等应被视为单个元素 这是在一家知名公司的求职面试中被问到的 有人可以帮我解决这个问题吗 我认为更好的方法是检查字典中的每个单词 看看是否可以从
  • 关于在字典中查找所有有效单词的算法问题

    给定一个字典 只是一个字符串列表 您收到来自外部来源的未知数量的信件 给定字母串 您将如何列出您可以通过这些字母的任意组合组成的所有有效单词 来自字典 因此 如果您收到 applead 你应该找到apple bad pad lead等 我知
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 需要解释搜索最小大和的算法

    我正在解决 Codility 问题作为练习 但无法回答其中一个问题 我在互联网上找到了答案 但我不明白这个算法是如何工作的 有人可以引导我逐步完成它吗 这是问题 You are given integers K M and a non em
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1

随机推荐

  • 如何使用 CSS 设置代码列表样式?

    我想使用 CSS 在 HTML 文档中显示编程语言代码片段以及 HTML 代码 我希望它缩进并采用固定宽度的字体 我正在考虑类似的事情 blockquote my code here my code here also blockquote
  • 在 TFS 项目中查找标签

    我目前正在使用以下代码通过指定标签查找 tfs 项目内的分支 TfsTeamProjectCollection tfs new TfsTeamProjectCollection new Uri tfsuri var vcs tfs GetS
  • 如何更改 Subclipse 中的用户凭据?

    我正在使用 Subclipse Eclipse 中的 Subversion 集成 我现在想更改 subclipse 中的用户凭据 我怎么做 即使用另一个用户帐户登录 Subversion 删除或重命名 Eclipse 配置文件夹中的 Ecl
  • 如何在JavaFX中使用CSS制作动画?

    我想改变风格Node通过更改其样式类别 Button button new Button button getStyleClass add class1 button setOnMouseClicked new EventHandler
  • 如何获取我的IP地址? [复制]

    这个问题在这里已经有答案了 我有一个 serverSocket 我想知道 IP 地址 但是 listenSocket getInetAddress toString I get 0 0 0 0 如何获取 IP 地址或 如果启用了两个连接 其
  • NodeJS 读取/写入文件到网络驱动器

    我有一个使用 fs createWriteStream 将文件写入磁盘的脚本 我现在想要实现的目标是将这些文件写入共享网络驱动器 目录如下 hostname scratch reece 我在 Windows 上运行这个脚本 但是当我部署它时
  • Twitter API - 注销

    我在我的网络应用程序中使用 OAuth 用户可以使用 twitter 登录 我想添加 切换 twitter 帐户 按钮 该按钮实际上会清除会话 然后打开authorize url 由于清除我的网络应用程序中的会话不会注销 twitter 因
  • 如何仅将 jquery 应用于移动设备?

    我只需要为移动浏览器应用以下 jquery 这是为了重新排序引导列的位置 我该怎么做呢 需要用什么东西包裹起来吗 总是很难检测到它是移动设备的浏览器还是带有触摸屏的笔记本电脑 因此 不要检测它 如果您担心屏幕尺寸 那么我会建议您检测屏幕尺寸
  • 如果没有有效的选择,如何返回到第一个 if 语句

    如果没有正确满足条件 如何让 Python 移动到 if 语句的顶部 我有一个基本的 if else 语句 如下所示 print pick a number 1 or 2 a int raw input gt if a 1 print th
  • 从鼠标坐标到 3d 的点-三角形相交?

    我知道如何测试点和三角形之间的交点 但是我不明白 如何使用鼠标坐标将点的起始位置精确地移动到屏幕平面上 因此点角度应该根据鼠标光标在屏幕上的位置而变化 这也应该起作用完美的是 无论我在 OpenGL 应用程序中使用哪个透视角度 因此不同透视
  • 如何删除fiddler安装的根CA证书

    Fiddler 有助于添加唯一的根 CA 证书来拦截 HTTPS 流量 添加此证书后 如何删除它 两种方式之一 1 禁用 HTTPS 解密并单击标题为 删除拦截证书 的按钮 2 打开 CertMgr msc 打开个人和受信任存储 然后使用根
  • 以编程方式复制 WPF 控件

    我有一个选项卡控件 当用户想要添加到它时 我想复制几个已经存在的元素 而不仅仅是引用它们 现在 到目前为止我只是硬复制了我想要的变量 但我在自动调整大小代码中出现了裁剪器 也就是说 在调整窗口大小时 复制的元素明显落后于原始元素 此外 随着
  • HTML5 视频暂停时显示海报图像或暂停按钮?

    您好 我正在为 iPad 编写一个本地网站 并且有一个没有控件的视频 点击时会播放和暂停 视频暂停时能否显示海报图片 或者在中间显示一个暂停按钮 这是我用于播放和暂停的代码
  • Pandas - Groupby 数据帧存储为数据帧而不聚合

    我是 Pandas 的新手 我在这里阅读了很多文档 帖子和答案 但我一直无法辨别出实现我的目标的好策略 抱歉 如果它已经得到解答 我找不到它 这是我所拥有的 df key A B A B value 2 2 1 1 df pd DataFr
  • Django 有办法打开 HTTP 长轮询连接吗?

    保持连接打开 直到事件发生 看一下姜戈 彗星 推 万恶之中最小的 https stackoverflow com questions 4310706 django comet push least of all evils or Pytho
  • 如何在 Android 上使用带有 c 和 java api 的库项目

    我在谷歌 android ndk 组中问过这个问题 但没有得到任何答案 我正在尝试通过单击在独立项目中构建通用模块 是图书馆 是日食 该项目同时提供c api 和java api 虽然其中一些 api 是相关的 这意味着将它们分开不是一个好
  • 如何简单地将数据帧的两列相乘? [复制]

    这个问题在这里已经有答案了 我的输入是 a lt c 1 2 3 4 b lt c 1 2 4 8 df lt data frame cbind a b 我的输出应该是 a lt c 1 2 3 4 b lt c 1 2 4 8 d lt
  • 在 Visual Studio 本地使用假域名,无需直接修改主机文件

    我有一个在这里运行的应用程序http 本地主机 10205 http localhost 10205 但我需要它在本地运行http somethingelse com http somethingelse com 这也需要在其他计算机上进行
  • 有没有办法在 Windows 中的 basic_iostream 上获得非锁定流插入/提取?

    我是一名 C 开发人员 主要在 Solaris 和 Linux 上进行编程 直到最近我被迫创建一个针对 Windows 的应用程序 我一直在使用基于 TCP 套接字支持的 C I O 流的通信设计 该设计基于单个线程连续从流中读取 大部分时
  • 将一个单词转换为另一个单词的最短路径

    对于数据结构项目 我必须找到两个单词之间的最短路径 例如 cat and dog 一次仅更改一个字母 我们得到了一个拼字游戏单词列表 用于寻找我们的路径 例如 cat gt bat gt bet gt bot gt bog gt dog 我