大多数大模型,不能正确回答我提出的问题。或许我的问题要求很高吧。
只是对于已有的一些大众化的知识能列出来,比如问把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()
发表评论