- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
只要我没记错,UCS 和 BFS 是一样的,唯一的区别是它不是扩展最浅的节点,而是扩展路径成本最低的节点。 (也为此使用 PriorityQueue 而不是 Queue)所以我复制了我的 BFS 代码,创建了一个额外的 Map 来跟踪每个节点的路径成本,并且只改变了项目在 Queue/Priority Queue 中被推送/弹出的方式。
注意:getSuccessors(state) 返回一个三元组列表(状态、 Action 、成本)
这些都是我的实现:
BFS:
def breadthFirstSearch(problem):
"""Search the shallowest nodes in the search tree first."""
queue=Queue()
objectQueue=Queue()
visited=set()
actions=[]
flag=0
objectMap={}
actionMap={}
start=problem.getStartState()
objectMap[start]=start
queue.push(start)
objectQueue.push(start)
if problem.isGoalState(start):
return actions
while queue:
parent=queue.pop()
object=objectQueue.pop()
if parent in visited: continue
visited.add(parent)
if problem.isGoalState(parent):
while object!=start:
action=actionMap[object]
actions.append(action)
object=objectMap[object]
return actions[::-1]
children=problem.getSuccessors(parent)
for child in children:
queue.push(child[0])
objectQueue.push(child)
objectMap[child]=object
actionMap[child]=child[1]
flag=1
util.raiseNotDefined()
UCS:
def uniformCostSearch(problem):
"""Search the node of least total cost first."""
queue=PriorityQueue()
objectQueue=PriorityQueue()
visited=set()
actions=[]
flag=0
objectMap={}
actionMap={}
costMap={}
start=problem.getStartState()
costMap[start]=0
objectMap[start]=start
queue.push(start, 0)
objectQueue.push(start, 0)
if problem.isGoalState(start):
return actions
while queue:
parent=queue.pop()
object=objectQueue.pop()
if parent in visited: continue
visited.add(parent)
if problem.isGoalState(parent):
while object!=start:
action=actionMap[object]
actions.append(action)
object=objectMap[object]
return actions[::-1]
children=problem.getSuccessors(parent)
for child in children:
costMap[child]=costMap[object]+child[2]
queue.update(child[0], costMap[child])
objectQueue.update(child, costMap[child])
objectMap[child]=object
actionMap[child]=child[1]
flag=1
util.raiseNotDefined()
根据提供给我的自动分级机,BFS 工作得很好,但我的 UCS 失败了。这是它失败的测试及其结果:
B1 E1
^ \ ^ \
/ V / V
*A --> C --> D --> F --> [G]
\ ^ \ ^
V / V /
B2 E2
A is the start state, G is the goal. Arrows mark
possible state transitions. This graph has multiple
paths to the goal, where nodes with the same state
are added to the fringe multiple times before they
are expanded.
The following section specifies the search problem and the solution.
The graph is specified by first the set of start states, followed by
the set of goal states, and lastly by the state transitions which are
of the form:
<start state> <actions> <end state> <cost>
start_state: A
goal_states: G
A 0:A->B1 B1 1.0
A 1:A->C C 2.0
A 2:A->B2 B2 4.0
B1 0:B1->C C 8.0
B2 0:B2->C C 16.0
C 0:C->D D 32.0
D 0:D->E1 E1 64.0
D 1:D->F F 128.0
D 2:D->E2 E2 256.0
E1 0:E1->F F 512.0
E2 0:E2->F F 1024.0
F 0:F->G G 2048.0
student solution: ['1:A->C', '0:C->D', '0:E1->F']
student expanded_states: ['A', 'B1', 'C', 'B2', 'D', 'E1', 'F', 'E2']
correct solution: ['1:A->C', '0:C->D', '1:D->F', '0:F->G']
correct expanded_states: ['A', 'B1', 'C', 'B2', 'D', 'E1', 'F', 'E2']
最佳答案
无论当前值如何,您都更新 costMap。因此,您会反复增加先前访问过的和当前 child 的尚未访问过的共同继承人的成本。
考虑这个例子:从 A 开始,在 C 结束。有节点链,每次转换的成本为 1:A->A1->A2->A3->A4->A5->A6->A7-> A8->A9->A10。每个 A 节点以成本 3 通向 B。B 通向 C。您当前的实现将从至少 3 个节点(A、A1、A2)多次更新 B 的成本,即使它的实际成本是 3(A-> B).
您应该检查 child 是否在 costMap 中,将当前的 costMap 值与新值进行比较,只有在新值更好时才将其插入队列。如果 costMap 不包含 child,则将其添加到 costMap 和队列中。
关于python - BFS 和 UCS 算法。我的 BFS 实现有效,但我的 UCS 无效。不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439810/
我有这个 UC: this.show = function() { ... var myvar = "Text of the var." this.Property1 = m
在浏览 unicode 文档时,我有时会看到术语 UTF-16 可与 UCS-2 互换使用,也可与 UTF-32 和 UCS-4 互换使用。我想知道 UTF-8 是否也有一个很酷的昵称,比如 UCS-
我有 50% 的流量来自 UC 浏览器。在新版本的 UC 浏览器中看不到谷歌广告,那么我如何从我的网站获得良好的收入? 我过去 7 天使用过 UC Union 广告网络,但它产生了 0 美元的收入。我
ucs-4字符'🤣'的unicode值为0001f923,复制到java代码中时会自动更改为\uD83E\uDD23对应的值在 IntelliJ IDEA 中。 Java仅支持ucs-2,因此发生了
正如标题所说的那样。 $ ./configure --help | grep -i ucs --enable-unicode[=ucs[24]] 查了官方文档,发现是这样的: sys.maxuni
只要我没记错,UCS 和 BFS 是一样的,唯一的区别是它不是扩展最浅的节点,而是扩展路径成本最低的节点。 (也为此使用 PriorityQueue 而不是 Queue)所以我复制了我的 BFS 代码
我正在尝试编译/构建我的项目,但我在下面收到此错误: [dcc32 fatal error ] 不支持 F2438 UCS-4 文本编码。转换为 UCS-2 或 UTF-8 IDE 没有显示我需要转换
下面是一个简单的标记。谁能帮我写一个脚本,该脚本仅在 uc mini 浏览器中显示带有“信息框”类的 div。它应该隐藏在浏览器的其余部分。 UC Mini .info-box { d
最近几天我一直被这个问题困扰,我有一个使用 Angular 构建的单页应用程序网站。 我在网站的一个部分实现了 div 的水平滚动(旋转木马类型 View ),在其他浏览器上运行良好。 然而,在 UC
我已经安装了来自 Entrust 的 UC 多域 SSL 证书,用于两个 OpenCart 安装和一个公司域,所有这些都托管在同一 IP。 我的证书上有 3 个域,顺序如下 www.example.c
我目前正在处理的项目需要与我们不制作的客户端系统交互,因此我们无法控制数据的发送方式。问题是在 C# 中工作,它似乎对 UCS-2 没有任何支持,对 big-endian 的支持也很少。 (据我所知)
我试图在我的 42 个字符密码中随机获取小写/大写。不知何故我反而得到: ucclcjuczlclucmlc0lcdlc5lc0ucdlccucmucquc5ucslc4lckucxuctlcvlcq
我正在尝试构建此 UI,因为浏览器屏幕长时间停留在一个部分并且无法在网络上找到任何相关主题。我想实现作为对话框弹出的 UC 浏览器设置/汉堡菜单。我如何开始这件事 images link contai
这是我的代码: ` .column1{ width:calc(100% - 100px); float:left; } .column2{ width:100px; float:left; } `
我的问题是特定于浏览器的。我的 css 在移动设备上的 UC 浏览器中无法像在其他浏览器中一样正常工作。 我想将占位符垂直居中对齐。但令我惊讶的是,垂直对齐似乎有点偏离。 这是我从UC浏览器截取的截图
我有一个文本文件,它是使用某些 Microsoft 报告工具创建的。文本文件在开头包含 BOM 0xFFFE,然后是 ASCII 字符输出,字符之间有空值(即“F.i.e.l.d.1.”)。我可以使用
我想在 Go 中翻译我的 python 程序,将 unicode 字符串转换为 UCS-2 HEX 字符串。 在 python 中,这很简单: u"Bien joué".encode('utf-16-
虽然researching options用于在可能很大的SQL Server数据库中存储大多数英语但有时不是的数据,但我倾向于将大多数字符串数据存储为UTF-8编码。 但是,Microsoft之所以
我在我的项目中使用 ATMEGA128 微 Controller 和 AVR studio。我正在使用接收中断 ISR_USART0 来接收 8 个字节的数据作为数据包,并且在完成接收数据后调用该中断
我已经制作了这个脚本,但我有一个问题: $(document).ready(function() { $('html').html(function(i, v) { var searchM
我是一名优秀的程序员,十分优秀!