大多数大模型,不能正确回答我提出的问题。或许我的问题要求很高吧。
只是对于已有的一些大众化的知识能列出来,比如问把C++中STL里vector的所有函数出来。
这样弱知的问题,只要在数据库里搜索一下找最接近的就行了。
对于创新型的问题,只能装模作样的给出一个答案,至于正不正确,最终还要依靠人来验证,所以是不可靠的。
毕竟,大模型还是没有意识的。由此推理,现阶段的自动驾驶汽车你敢去做吗?
上月帮别人做了一个演示DFS和BFS的小作品,做了个漂亮的界面还有背景音乐啥的。
这个作品中其中的一个核心代码如下所示:
它只是根据前序遍历和中序遍历,把二叉树画出来,并不会演示DFS和BFS动画。读者可以自己去增加GUI。
"""
封装了一个叫DrawTree的类。
它能根据二叉树的前序遍历和中序遍历,求后序遍历,并且用海龟把二叉树画出来。
"""
from turtle import TurtleScreen, RawTurtle, TK
class Node: # 树的结点
def __init__(self,val):
self.value = val
self.parent = None
self.left = None
self.right = None
class DrawTree:
def __init__(self,haigui):
self.haigui = haigui
self.cors = {} # 此字典用于保存每个顶点对应的坐标
self.pre_order_s = [] # 保存前序遍历这个序列
self.in_order_s = [] # 保存中序遍历这个序列
self.post_order_s=[] # 保存后序遍历的列表
self.level_order_s=[] # 保存按层(BFS)遍历的列表
def build_tree(self,pre_order,in_order): # 根据前序遍历和中序遍历构建树
if len(pre_order)==0 or len(in_order)==0 :return None
root_val = pre_order[0] # 因为前序遍历的第一个肯定是根
pos = in_order.index(root_val) # 根据值在中序遍历找到root_val,并且返回索引号
root = Node(root_val)
root.left = self.build_tree(pre_order[1:pos+1],in_order[:pos])
root.right = self.build_tree(pre_order[pos+1:],in_order[pos+1:])
if root.left: root.left.parent = root
if root.right: root.right.parent = root
self.root = root
return root
def post_order(self):
"""后序遍历"""
if self.root!=None:
if self.root.left:
bk = self.root
self.root = self.root.left
self.post_order()
self.root = bk
if self.root.right:
bk = self.root
self.root = self.root.right
self.post_order()
self.root = bk
self.post_order_s.append(self.root.value)
def level_order(self):
"""按层遍历BFS"""
queue = [] # 建立队列
queue.append(self.root) # 入队
while queue:
node = queue.pop(0) # 出队
self.level_order_s.append(node.value)
if node.left:queue.append(node.left)
if node.right:queue.append(node.right)
def fd2(self,distance):
self.haigui.penup();self.haigui.fd(distance*0.2);self.haigui.pendown()
self.haigui.fd(distance*0.6);self.haigui.penup();self.haigui.stamp();self.haigui.fd(distance*0.2)
def draw_dot(self,num): # 在坐标点打点,并在点上写上数字
dx = 0
dy = -10
ft = ('宋体',14,'normal')
pos = self.haigui.position()
self.haigui.dot(30,'orange')
self.haigui.dot(26,'blue')
x = pos[0] + dx
y = pos[1] + dy
self.haigui.goto(x,y)
self.cors[num] = pos # 记录每个点的坐标
self.haigui.color('white')
self.haigui.write(num,align='center',font=ft)
self.haigui.color('black')
self.haigui.goto(pos)
def draw_binary_tree(self,pre_order,in_order,root_pos=(0,200)):
self.cors.clear()
self.pre_order_s = pre_order[:] # 保存前序遍历这个序列
self.in_order_s = in_order[:] # 保存中序遍历这个序列
self.post_order_s.clear() # 清空后序遍历列表
self.level_order_s.clear() # 清空按层次遍历这个列表
self.build_tree(pre_order,in_order) # 根据序列构建二叉树
self.post_order() # 后序遍历,为的是保存序列到self.post_order_s列表
self.level_order() # 按层遍历(BFS)
self.haigui.goto(root_pos) # 到达根结点的坐标
self.haigui.clear()
self._draw_BST_tree() # 最终调用它来画二叉树
def _draw_BST_tree(self,dis=150,angle=45): # 画二叉树,请把它进行美化
"""hg:海龟,tree:树的根结点,dis:距离,angle:张开角度"""
self.draw_dot(self.root.value)
if self.root.left!=None:
self.root = self.root.left
self.haigui.right(angle);self.fd2(dis);self.haigui.left(angle)
self._draw_BST_tree(dis*0.85,angle*0.62);self.haigui.right(angle)
self.haigui.bk(dis);self.haigui.left(angle)
self.root = self.root.parent
if self.root.right!=None:
self.root = self.root.right
self.haigui.left(angle);self.fd2(dis);self.haigui.right(angle)
self._draw_BST_tree(dis*0.85,angle*0.62);self.haigui.left(angle)
self.haigui.bk(dis);self.haigui.right(angle)
self.root = self.root.parent
def clear(self):
self.haigui.clear()
if __name__ == '__main__':
import time
time.sleep(0)
orders = [("1245367","4251637"),("EHBCFADG","BHFCAEDG"),("ABDEC","DBEAC"),("12453","42513"),
("124895AB36CD7EF","8492A5B1C6D3E7F"),("ABCDEFG","ABCDEFG"),([19,13,11,30,25,65],[11,13,19,25,30,65]),
([19,13,11,9,6,12,30,25,22,60,70,88],[6,9,11,12,13,19,22,25,30,60,70,88]),
([19,13,11,9,8,4,12,30,25,22,23,60,45,38,52,70,72,83],[4,8,9,11,12,13,19,22,23,25,30,38,45,52,60,70,72,83]),
([19,13,11,9,8,4,1,2,3,10,12,15,30,25,22,21,23,60,45,38,52,48,55,70,62,72,83,99],[1,2,3,4,8,9,10,11,12,13,15,19,21,22,23,25,30,38,45,48,52,55,60,62,70,72,83,99]) ]
orders = [("124895AB36CD7EF","8492A5B1C6D3E7F")]
root = TK.Tk()
canvas = TK.Canvas(root,width=920,height=800)# 新建画布
canvas.pack()
screen = TurtleScreen(canvas) # 新建海龟屏幕
screen.bgcolor('#FFF4F6') # 设定背景颜色
screen.delay(0)
# RawTurtle类就是原始海龟类,它是Turtle的父类
raw = RawTurtle(screen,visible=False)
raw.speed(0)
raw.penup()
raw.right(90)
d = DrawTree(raw) # 用raw来画图
for pre_order,in_order in orders[:-1]:
d.draw_binary_tree(pre_order,in_order,(0,350))
time.sleep(0.1)
#d.clear()
d.draw_binary_tree(*orders[-1],(0,350))
screen.mainloop()
