文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题

三、要求用最小堆实现最小优先队列,请写出 HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP DECREASE-KEY 和 MIN-HEAP-INSERT 的伪代码。

文心一言:

以下是使用最小堆实现最小优先队列的 HEAP-MINIMUM、HEAP-EXTRACT-MIN、HEAP-DECREASE-KEY 和 MIN-HEAP-INSERT 的伪代码:

// 初始化最小堆
min_heap = [] // 插入元素到最小堆
def min_heap_insert(element):
min_heap.append(element)
// 将新元素上移直到其满足堆的性质
heapify_up(len(min_heap) - 1) // 提取最小元素并保持最小堆性质
def min_heap_extract_min():
if len(min_heap) == 0:
return None
if len(min_heap) == 1:
return min_heap.pop()
min_value = min_heap[0]
min_heap[0] = min_heap.pop()
heapify_down(0)
return min_value // 修改元素值并保持最小堆性质
def min_heap_decrease_key(element, new_value):
min_heap[min_heap.index(element)] = new_value
heapify_up(min_heap.index(element)) // 上移元素直到其满足堆的性质
def heapify_up(index):
parent_index = (index - 1) // 2
if parent_index >= 0 and min_heap[index] < min_heap[parent_index]:
min_heap[index], min_heap[parent_index] = min_heap[parent_index], min_heap[index]
heapify_up(parent_index) // 下移元素直到其满足堆的性质
def heapify_down(index):
left_child_index = 2 * index + 1
right_child_index = 2 * index + 2
min_child_index = index
if left_child_index < len(min_heap) and min_heap[left_child_index] < min_heap[min_child_index]:
min_child_index = left_child_index
if right_child_index < len(min_heap) and min_heap[right_child_index] < min_heap[min_child_index]:
min_child_index = right_child_index
if min_child_index != index:
min_heap[index], min_heap[min_child_index] = min_heap[min_child_index], min_heap[index]
heapify_down(min_child_index)

这些函数实现了最小优先队列的基本操作。其中,min_heap_insert 插入元素到最小堆中,min_heap_extract_min 提取最小元素并保持最小堆性质,min_heap_decrease_key 修改元素值并保持最小堆性质,heapify_up 和 heapify_down 分别是上移和下移元素直到其满足堆的性质的辅助函数。

讯飞星火:

  1. HEAP-MINIMUM 伪代码:
function HEAP_MINIMUM(heap, size):
if size == 0:
return None
minValue = heap[0]
for i in range(1, size):
if heap[i] < minValue:
minValue = heap[i]
return minValue
  1. HEAP-EXTRACT-MIN 伪代码:
function HEAP_EXTRACT_MIN(heap, size):
if size == 0:
return None
minValue = heap[0]
maxIndex = 0
for i in range(1, size):
if heap[i] < minValue:
minValue = heap[i]
maxIndex = i
if maxIndex != 0:
heap[0], heap[maxIndex] = heap[maxIndex], heap[0]
HEAP_DECREASE_KEY(heap, maxIndex, minValue)
return minValue
  1. HEAP DECREASE-KEY 伪代码:
function HEAP_DECREASE_KEY(heap, index, newValue):
while index > 0 and heap[(index - 1) // 2] > newValue:
heap[(index - 1) // 2] = heap[index]
index = (index - 1) // 2
HEAP_STORE(heap, index, newValue)
  1. MIN-HEAP-INSERT 伪代码:
function MIN_HEAP_INSERT(heap, size, value):
if size == heap.length:
heap = resizeArray(heap, size * 2)
i = size
HEAP_STORE(heap, i, value)
j = i
while j > 0 and HEAP_EXTRACT_MIN(heap, j) > value:
HEAP_STORE(heap, j, heap[(j - 1) // 2])
j = (j - 1) // 2

360智脑:

HEAP-MINIMUM(root):

if root is empty or root.key == minimumKey: 

    return None 

minNode = heap[0] 

heap.pop() 

return minNode

HEAP-EXTRACT-MIN(root):

if root is None: 

    return None 

minNode = root 

heap.insert(root) 

return minNode

HEAP DECREASE-KEY(root):

if root is None: 

    return None 

minNode = root 

while minNode.right: 

    minNode = minNode.right 

    heap.decreaseKey(minNode.right) 

heap.decreaseKey(minNode) 

return minNode

MIN-HEAP-INSERT(root):

if root is None: 

    return None 

minNode = root 

while not minNode.left and not minNode.right: 

    minNode = minNode.left 

    heap.insert(minNode) 

heap.decreaseKey(minNode) 

return minNode

chatglm:

以下是使用最小堆实现最小优先队列的伪代码:

HEAP-MINIMUM(heap, n):
// 在最小堆中找到最小的元素
// heap 是堆,n 是元素个数
i ← n/2
if i < 0 then return null
j ← 2*i
if j < n and heap[j] < heap[i] then i ← j
if j < n and heap[j+1] < heap[i] then i ← j+1
return heap[i]
HEAP-EXTRACT-MIN(heap, n):
// 从最小堆中取出最小的元素
// heap 是堆,n 是元素个数
result ← HEAP-MINIMUM(heap, n)
if result == null then return null
for i ← n-1 downto 1:
heap[i] ← heap[i+1]
heap[n] ← null
return result
HEAP-DECREASE-KEY(heap, n, i):
// 减小堆中第 i 个元素的优先级
// heap 是堆,n 是元素个数,i 是元素索引
if i < 0 or i >= n then return
j ← 2*i
if j < n and heap[j] >= heap[i] then return
heap[i] ← heap[j]
HEAP-DECREASE-KEY(heap, n, j)
MIN-HEAP-INSERT(heap, n, key):
// 将元素 key 插入最小堆中,返回新的元素个数
// heap 是堆,n 是元素个数,key 是元素值
if n == 0 then
heap ← [key]
n ← 1
return 1
i ← n/2
if key < heap[i] then i ← 1
heap[i] ← key
HEAP-DECREASE-KEY(heap, n, i)
return n

这些伪代码函数可以通过编程语言的堆实现来实现最小优先队列。在这些函数中,HEAP-MINIMUM 函数用于在堆中查找最小元素,HEAP-EXTRACT-MIN 函数用于从堆中提取最小元素,HEAP-DECREASE-KEY 函数用于减小堆中某个元素的优先级,MIN-HEAP-INSERT 函数用于将元素插入到最小堆中并返回新的元素个数。使用这些函数,可以实现最小优先队列的插入、删除和查找操作。

通义千问:

下面是最小堆常用操作的伪代码:

HEAP-MINIMUM: 对堆顶元素进行比较,如果比堆底元素小,则将堆底元素替换为堆顶元素;否则,保持堆顶元素不变。

HEAP-EXTRACT-MIN: 取出堆顶元素,并将堆顶元素的父节点(如果存在)移动至其子节点中最小的一个。如果堆顶元素没有子节点,则将堆底元素移动至堆顶,并将堆底元素的父节点(如果存在)移动至其子节点中最小的一个。

HEAP-DECREASE-KEY: 对堆顶元素的键值进行比较,如果比堆底元素的键值小,则将堆底元素替换为堆顶元素;否则,保持堆顶元素不变。

MIN-HEAP-INSERT: 将元素插入堆中,并检查插入后的堆是否满足最小堆的性质。如果不满足,则对堆进行调整,直到满足最小堆的性质为止。

天工:

下面是使用最小堆实现最小优先队列的伪代码:

HEAP-MINIMUM:

1.如果堆为空,则返回 -1;

2.否则,取出堆顶元素 x,如果 x 大于等于 key,则返回 x;

3.否则,执行下面的步骤,直到找到一个元素 x 满足条件 x 大于等于 key:

a. 取出堆顶元素 y,将 y 替换为 x;

b. 执行 HEAP-EXTRACT-MIN。

HEAP-EXTRACT-MIN:

1.如果堆为空,则返回 -1;

2.否则,取出堆顶元素 x,将 x 替换为堆顶元素 y,并将 y 删除;

3.执行下面的步骤,直到堆为空:

a. 执行 HEAP-DECREASE-KEY。

HEAP-DECREASE-KEY:

1.如果堆为空,则返回 -1;

2.否则,取出堆顶元素 x,将 x 替换为堆顶元素 x 的下一个元素 y;

3.执行下面的步骤,直到堆为空:

a. 执行 HEAP-EXTRACT-MIN。

MIN-HEAP-INSERT:

1.如果堆为空,则将元素 x 插入堆中;

2.否则,取出堆顶元素 x,将元素 x 插入堆中,并将元素 x 替换为堆顶元素 y;

3.执行下面的步骤,直到堆中只有一个元素:

a. 执行 HEAP-EXTRACT-MIN。

chatgpt:

以下是使用最小堆实现最小优先队列的伪代码:

HEAP-MINIMUM(A):

返回 A[0] // A[0] 是最小堆中的最小元素

HEAP-EXTRACT-MIN(A):

如果 A.length < 1:

返回 错误(堆为空)

min = A[0] // 最小元素为根节点

A[0] = A[A.length - 1] // 将最后一个元素放到根节点

A.length = A.length - 1 // 去除最后一个元素

MIN-HEAPIFY(A, 0) // 保持最小堆的性质

返回 min

HEAP-DECREASE-KEY(A, i, key):

如果 key > A[i]:

返回 错误(新的键值大于当前键值)

A[i] = key // 更新键值

while i > 0 并且 A[PARENT(i)] > A[i]: // 如果父节点的键值大于当前节点的键值

交换 A[i] 和 A[PARENT(i)] // 交换节点和其父节点

i = PARENT(i) // 上移节点,继续检查

MIN-HEAP-INSERT(A, key):

A.length = A.length + 1 // 扩展堆的容量

A[A.length - 1] = +∞ // 将新节点设置为正无穷大

HEAP-DECREASE-KEY(A, A.length - 1, key) // 更新节点键值,保持最小堆的性质

其中,PARENT(i) 返回节点索引 i 的父节点索引,MIN-HEAPIFY(A, i) 用于保持最小堆的性质,将节点 i 向下调整以满足最小堆的条件。

总结

文心一言 VS 讯飞星火 VS chatgpt (64)-- 算法导论6.5 3题的更多相关文章

  1. 【对比】文心一言对飚ChatGPT实操对比体验

    前言 缘由 百度[文心一言]体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来.心中这好奇的对比心理油然而生,到底是老美的[ChatGPT]厉害,还是咱度娘的[文心 ...

  2. 【个人首测】百度文心一言 VS ChatGPT GPT-4

    昨天我写了一篇文章GPT-4牛是牛,但这几天先别急,文中我测试了用GPT-4回答ChatGPT 3.5 和 Notion AI的问题,大家期待的图片输入也没有出现. 昨天下午百度发布了文心一言,对标C ...

  3. 文心一言,通营销之学,成一家之言,百度人工智能AI大数据模型文心一言Python3.10接入

    "文心"取自<文心雕龙>一书的开篇,作者刘勰在书中引述了一个古代典故:春秋时期,鲁国有一位名叫孔文子的大夫,他在学问上非常有造诣,但是他的儿子却不学无术,孔文子非常痛心 ...

  4. 获取了文心一言的内测及与其ChatGPT、GPT-4 对比结果

    百度在3月16日召开了关于文心一言(知识增强大语言模型)的发布会,但是会上并没现场展示demo.如果要测试的文心一言 也要获取邀请码,才能进行测试的. 我这边通过预约得到了邀请码,大概是在3月17日晚 ...

  5. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...

  6. 阿里版ChatGPT:通义千问pk文心一言

    随着 ChatGPT 热潮卷起来,百度发布了文心一言.Google 发布了 Bard,「阿里云」官方终于也宣布了,旗下的 AI 大模型"通义千问"正式开启测试! 申请地址:http ...

  7. 基于讯飞语音API应用开发之——离线词典构建

    最近实习在做一个跟语音相关的项目,就在度娘上搜索了很多关于语音的API,顺藤摸瓜找到了科大讯飞,虽然度娘自家也有语音识别.语义理解这块,但感觉应该不是很好用,毕竟之前用过百度地图的API,有问题也找不 ...

  8. android用讯飞实现TTS语音合成 实现中文版

    Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...

  9. android讯飞语音开发常遇到的问题

    场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...

  10. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

随机推荐

  1. 搞懂Python正则表达式,这一篇就够了

    本文代码基于Python3.11解释器,除了第一次示例,代码将省略 import re 这个语句 所有示例代码均可以在我的github仓库中的 code.py文件内查看 [我的仓库](PythonLe ...

  2. JS中的Map、Set、WeakMap和WeakSet

    在JavaScript中,Map.Set.WeakMap和WeakSet是四个不同的数据结构,它们都有不同的特点和用途: 1. Map :Map是一种键值对的集合,其中的键和值可以是任意类型的.与对象 ...

  3. GPT护理机器人 - 让护士的工作变简单

    引子 书接上文<GPT接入企微应用 - 让工作快乐起来>,我把GPT接入了企微应用,不少同事都开始尝试起来了.有的浅尝辄止,有的刨根问底,五花八门,无所不有.这里摘抄几份: "帮 ...

  4. 互异关系容斥&集合幂级数小记

    最近碰见了一些互异关系容斥的题目,而这类题目往往要配合集合幂级数的一些技术使用,所以简单记记. 内容很杂,行文很乱,作者水平很低,酌情观看. 互异关系容斥 思想其实很基本,应用范围其实很广. 原论文. ...

  5. 2023-01-14:给定一个二维数组map,代表一个餐厅,其中只有0、1两种值 map[i][j] == 0 表示(i,j)位置是空座 map[i][j] == 1 表示(i,j)位置坐了人 根据防

    2023-01-14:给定一个二维数组map,代表一个餐厅,其中只有0.1两种值 map[i][j] == 0 表示(i,j)位置是空座 map[i][j] == 1 表示(i,j)位置坐了人 根据防 ...

  6. 2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的。返回其长度。

    2021-03-23:给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K并且是长度最大的.返回其长度. 福大大 答案2021-03-23: 双指 ...

  7. 2021-12-13:字符串解码。给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k

    2021-12-13:字符串解码.给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k ...

  8. this关键字理解

    编译器对对象的加载步骤: (1)类名 (2)成员变量 (3)成员方法 即使定义类时,成员变量写在成员方法后面,加载对象时,也是先加载成员变量 当编译器识别方法时,会对成员方法改写,在所有方法里隐藏一个 ...

  9. 最全的git操作命令(持续更新)

    当前使用git进行版本管理越来越频繁,但是难免还是有些命令记不全,曾当前闲暇记录一下,免得需要时漫天找寻 目录 一. 配置用户信息 1.git config [配置git 用户信息] 2.git co ...

  10. odoo总结---类继承和视图继承

    类继承 自从有了类,就有继承,继承是类最大的特性,ODOO开发有不例外,先ODOO集采总结如下: 1)类继承:扩展类中没有_name属性,因为它继承了父类的_name.对现有模型的扩展, 添加新功能, ...