学计算机的人猴尖猴尖的,真想变成这样的老油条。

上帝无言 2011-03-30 11:09:56
刚学二叉树和图,书上的这几个例子在我脑子里绕了两天才绕明白,看完这程序感觉心眼不够使了。
要是没看过,打死我也想不出来
第一个是二叉树的例子


# -*- coding:utf-8 -*-

class BTree(object):
def __init__(self, value):
self.left = None
self.data = value
self.right = None

def insertLeft(self, value):
self.left = BTree(value)
return self.left

def insertRight(self, value):
self.right = BTree(value)
return self.right

def show(self):
print self.data
# 先序遍历
def preorder(node):
if node.data:
node.show()
if node.left:
preorder(node.left)
if node.right:
preorder(node.right)
# 中序遍历
def inorder(node):
if node.data:
if node.left:
inorder(node.left)
node.show()
if node.right:
inorder(node.right)
# 后序遍历
def postorder(node):
if node.data:
if node.left:
postorder(node.left)
if node.right:
postorder(node.right)
node.show()

if __name__ == '__main__':
Root = BTree('Root')
A = Root.insertLeft('A')
C = A.insertLeft('C')
D = A.insertRight('D')
F = D.insertLeft('F')
G = D.insertRight('G')
B = Root.insertRight('B')
E = B.insertRight('E')




第二个图的例子


# -*-coding: utf-8 -*-

def A(graph, start, end):
result = []
B(graph, [start], end, result)
result.sort(lambda x, y: cmp(len(x), len(y)))
return result

def B(graph, start, end, result):
data = start[-1]
if data == end:
result.append(start)
else:
for rt in graph[data]:
if rt not in start:
B(graph, start+[rt], end, result)

if __name__ == '__main__':
Graph = {'A': ['B', 'C', 'D'],
'B': ['E'],
'C': ['D', 'F'],
'D': ['B', 'E', 'G'],
'E': [],
'F': ['D', 'G'],
'G': ['E']}
r1 = A(Graph, 'A', 'D')
r2 = A(Graph, 'A', 'E')
r3 = A(Graph, 'C', 'E')



第三个是二分查找,老油条啊老油条。


# -*- coding:utf-8 -*-
import images

def BinarySearch(l, key):
low = 0
high = len(l) -1
i = 0
while (low <= high):
i += 1
mid = (high + low) / 2
if (l[mid] < key):
low = mid + 1
print 'Here is %d,mid is %d, high is %d, low is %d'% (l[mid], mid, high, low)
elif (l[mid] > key):
high = mid - 1
print 'Here is %d,mid is %d, high is %d, low is %d'% (l[mid], mid, high, low)
else:
print 'Here is %d,mid is %d, high is %d, low is %d'% (l[mid], mid, high, low)
print 'Here is %d'% l[mid]
print 'usr %d time(s)'% i

return mid
return -1

if __name__ == '__main__':
l = [1, 5, 6, 9, 10, 51, 62, 65, 70]

#程序中间的 print 各参数是我后加的,方便看运行情况
...全文
273 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
上帝无言 2011-03-31
  • 打赏
  • 举报
回复
我现在看这本书,Python数据结构与算法(En).chm 专用python的,我喜欢。汇编和C/C++学的不好也忘的差不多了,python牌上帝保佑我,保佑我。结贴了。
苍蝇①号 2011-03-30
  • 打赏
  • 举报
回复
# 先序遍历
def preorder(node):
if node.data:
node.show()
if node.left:
preorder(node.left)
if node.right:
preorder(node.right)
# 中序遍历
def inorder(node):
if node.data:
if node.left:
inorder(node.left)
node.show()
if node.right:
inorder(node.right)
# 后序遍历
def postorder(node):
if node.data:
if node.left:
postorder(node.left)
if node.right:
postorder(node.right)

节点没有data也可以有children哦,我觉得不应该先if node.data:
I_NBFA 2011-03-30
  • 打赏
  • 举报
回复
看的啥书,例子不咋地
上帝无言 2011-03-30
  • 打赏
  • 举报
回复
第三个例子忘了把 import images拿掉了。
I_NBFA 2011-03-30
  • 打赏
  • 举报
回复
超搞,那些都基础自重者必备,高精尖省省吧差远了,既然你那么厌恶比较,python牌上帝保佑你在烂书的海
洋里犹如盲龟穿孔中大奖不至于让你"浪费时间".
上帝无言 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 i_nbfa 的回复:]
搞笑顺手?好的算法书一定用最精简直接的代码直击要害,满书例程明摆着给你看,啥语言都顺手。
除非不了解这门语言那你看个啥?会的语言越多选择面越广,有比较才有高下,你选择范围多大肯定
"没有浪费时间"??? 我看来将易读和深广度结合最好的莫过sedgewick的algorithms in c 1-5,
正视推荐你你看么?编译原理满世界c主流,计算机原理操作系统少不了汇编,程序设计西方独领风骚,
……
[/Quote]
你给我讲的是道理,我给自己讲的呢是实际,我追求的不是你们这样的高,精,尖,根据我自身需求来讲,我不需要知道汇编,也不需要知道C,还有会那么多语言,选择那么广,也不用比较高下,并且也很讨厌在比来比去中浪费时间,我不想关心哪个高低,我只有python就暂时够了,因为我选好了这个,或许以后我还会学到其它的,那是以后的事了,一步一步来。P民什么的就不说了,多说无益。
I_NBFA 2011-03-30
  • 打赏
  • 举报
回复
搞笑顺手?好的算法书一定用最精简直接的代码直击要害,满书例程明摆着给你看,啥语言都顺手。
除非不了解这门语言那你看个啥?会的语言越多选择面越广,有比较才有高下,你选择范围多大肯定
"没有浪费时间"??? 我看来将易读和深广度结合最好的莫过sedgewick的algorithms in c 1-5,
正视推荐你你看么?编译原理满世界c主流,计算机原理操作系统少不了汇编,程序设计西方独领风骚,
baidu查不到资料经常求google吐鸟语,真遗憾那这里毛python啥事浪费你时间了,猴有尖就算了吧。
P民和"动动手做些实实在在的事情"又有啥关系?P民集体变身YY帝了?
上帝无言 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iambic 的回复:]
“征服Python”和数据结构算法完全是两码事。你要像学数据结构和算法就找个专业的讲数据结构算法的书,随便找本烂书看还不如不看。要只是出于学习Python的目的,数据结构和算法不必学习。学了也用不着。
[/Quote]
有道理,这本书这几页就像乞丐偷食一样,我还是直接看专业的书好了,

re #9楼
我也不挑食,在学习知识的过程中还是希望能够使最少的阅读量得到想要的知识,也是为了节省时间,不过目前的学习算法要有python实现的也是英语的好,只能看英语写的书了,虽然翻译慢点,但也能学些英语知识,总不会白忙的,像你说的有营养。python无论能闪亮多久,在我看来,目前这是我用的最顺手的语言了,可能我永远都会用下去,写的不需要C那样的速度所以挺满足的,能节省我的时间才是我最重要的,因为python编程速度比较快。另外许多人喜欢用’P民‘来自嘲或是什么,在我看来动动手做些实实在在的事情比这两个字更能让我获益,所以在迫切渴望时间的现在,我选择默默的收获。

谢谢各位的热心帮助!
I_NBFA 2011-03-30
  • 打赏
  • 举报
回复
python还得中文的,没有,一介P民没那么挑食只求营养。
完全意识流的东西,葵花宝典类汇编写成,九阴真经直接pseudocode,python闪亮多久?
我们不少P民被数据结构算法凌辱时听都毛听过。
iambic 2011-03-30
  • 打赏
  • 举报
回复
“征服Python”和数据结构算法完全是两码事。你要像学数据结构和算法就找个专业的讲数据结构算法的书,随便找本烂书看还不如不看。要只是出于学习Python的目的,数据结构和算法不必学习。学了也用不着。
上帝无言 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cangyingzhijia 的回复:]
# 先序遍历
def preorder(node):
if node.data:
node.show()
if node.left:
preorder(node.left)
if node.right:
preorder(node.right)
# 中序遍历
def inorder(node):
if node.data:
if node.le……
[/Quote]
刚接触,不知道没有根也可以有子呢。

re #3楼
但是例子够直接, 好的中文python数据结构算法你有?借点光来

re #5楼

这书是 征服python我只挑数据结构和算法这一点点看了,只有几页,看完就得去慢慢磨鸟语教程了。。。
iambic 2011-03-30
  • 打赏
  • 举报
回复
用Python教数据结构?难道是交大的?

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧