p*y
2 楼
【 以下文字转载自 ClassicalMusic 讨论区 】
发信人: purity (purity), 信区: ClassicalMusic
标 题: 请教:这是什么音乐?
发信站: BBS 未名空间站 (Fri Aug 13 21:33:01 2010, 美东)
你们知不知道从0.45min开始的音乐名称是什么?
太美了,听了很陶醉。。。。。想找出来专门听。
http://www.youtube.com/watch?v=KFR7eWn795s
0.19min那个音乐也很好听。
发信人: purity (purity), 信区: ClassicalMusic
标 题: 请教:这是什么音乐?
发信站: BBS 未名空间站 (Fri Aug 13 21:33:01 2010, 美东)
你们知不知道从0.45min开始的音乐名称是什么?
太美了,听了很陶醉。。。。。想找出来专门听。
http://www.youtube.com/watch?v=KFR7eWn795s
0.19min那个音乐也很好听。
W*o
3 楼
新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
先级?
以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
但是我的计算器界面没有括号输ru
谢谢赐教!
先级?
以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
但是我的计算器界面没有括号输ru
谢谢赐教!
i*t
4 楼
opt+h1b
p*e
5 楼
这是神秘园第一张专辑里面的同名曲目
Song from a Secret Garden
http://www.youtube.com/watch?v=wasYNNfnfVE
【在 p****y 的大作中提到】
: 【 以下文字转载自 ClassicalMusic 讨论区 】
: 发信人: purity (purity), 信区: ClassicalMusic
: 标 题: 请教:这是什么音乐?
: 发信站: BBS 未名空间站 (Fri Aug 13 21:33:01 2010, 美东)
: 你们知不知道从0.45min开始的音乐名称是什么?
: 太美了,听了很陶醉。。。。。想找出来专门听。
: http://www.youtube.com/watch?v=KFR7eWn795s
: 0.19min那个音乐也很好听。
Song from a Secret Garden
http://www.youtube.com/watch?v=wasYNNfnfVE
【在 p****y 的大作中提到】
: 【 以下文字转载自 ClassicalMusic 讨论区 】
: 发信人: purity (purity), 信区: ClassicalMusic
: 标 题: 请教:这是什么音乐?
: 发信站: BBS 未名空间站 (Fri Aug 13 21:33:01 2010, 美东)
: 你们知不知道从0.45min开始的音乐名称是什么?
: 太美了,听了很陶醉。。。。。想找出来专门听。
: http://www.youtube.com/watch?v=KFR7eWn795s
: 0.19min那个音乐也很好听。
z*e
6 楼
use ruby
p*y
7 楼
太好了,谢谢!
你还知不知道0.18min那个音乐的名称?也很好听!
【在 p**e 的大作中提到】
: 这是神秘园第一张专辑里面的同名曲目
: Song from a Secret Garden
: http://www.youtube.com/watch?v=wasYNNfnfVE
你还知不知道0.18min那个音乐的名称?也很好听!
【在 p**e 的大作中提到】
: 这是神秘园第一张专辑里面的同名曲目
: Song from a Secret Garden
: http://www.youtube.com/watch?v=wasYNNfnfVE
p*e
9 楼
也是神秘园的
后期专辑里的一个,名字叫The Promise
http://www.youtube.com/watch?v=sqxbZq7d86Q
【在 p****y 的大作中提到】
: 太好了,谢谢!
: 你还知不知道0.18min那个音乐的名称?也很好听!
后期专辑里的一个,名字叫The Promise
http://www.youtube.com/watch?v=sqxbZq7d86Q
【在 p****y 的大作中提到】
: 太好了,谢谢!
: 你还知不知道0.18min那个音乐的名称?也很好听!
p*y
11 楼
wow,你好强!太厉害了,什么歌都知道!
谢谢!
【在 p**e 的大作中提到】
: 也是神秘园的
: 后期专辑里的一个,名字叫The Promise
: http://www.youtube.com/watch?v=sqxbZq7d86Q
谢谢!
【在 p**e 的大作中提到】
: 也是神秘园的
: 后期专辑里的一个,名字叫The Promise
: http://www.youtube.com/watch?v=sqxbZq7d86Q
c*o
12 楼
yes, recursive, or you may say "use stack"
stack is the standard way to do this.
stack is the standard way to do this.
d*n
16 楼
有几个做法, 比如:
http://en.wikipedia.org/wiki/Shunting-yard_algorithm
http://en.wikipedia.org/wiki/Operator-precedence_parser
后者结合recursive descent parsing是现在手写parser很常用的一种方法, 这个教程
介绍了如何用:
http://llvm.org/docs/tutorial/LangImpl2.html
【在 W***o 的大作中提到】
: 新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
: 先级?
: 以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
: 但是我的计算器界面没有括号输ru
: 谢谢赐教!
http://en.wikipedia.org/wiki/Shunting-yard_algorithm
http://en.wikipedia.org/wiki/Operator-precedence_parser
后者结合recursive descent parsing是现在手写parser很常用的一种方法, 这个教程
介绍了如何用:
http://llvm.org/docs/tutorial/LangImpl2.html
【在 W***o 的大作中提到】
: 新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
: 先级?
: 以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
: 但是我的计算器界面没有括号输ru
: 谢谢赐教!
W*o
17 楼
wow, Thank you guys very much
【在 d****n 的大作中提到】
: 有几个做法, 比如:
: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
: http://en.wikipedia.org/wiki/Operator-precedence_parser
: 后者结合recursive descent parsing是现在手写parser很常用的一种方法, 这个教程
: 介绍了如何用:
: http://llvm.org/docs/tutorial/LangImpl2.html
【在 d****n 的大作中提到】
: 有几个做法, 比如:
: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
: http://en.wikipedia.org/wiki/Operator-precedence_parser
: 后者结合recursive descent parsing是现在手写parser很常用的一种方法, 这个教程
: 介绍了如何用:
: http://llvm.org/docs/tutorial/LangImpl2.html
p*o
18 楼
You may define the precedence levels for operators. E.g.,
precedence = {
'(': 0, ')': 0,
'+': 1, '-': 1,
'*': 2, '/': 2, '//': 2, '%': 2,
'^': 3, '**': 3,
}
operators = set(precedence.iterkeys())
right_associative_ops = {'^', '**',}
def infix_to_postlist (infix):
""" Simplified Shunting-yard algorithm. E.g.,
30 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
<==> 30 + ((4 * 2) / ((1 - 5) ^ (2 ^ 3)))
<==> 30 4 2 * 1 5 - 2 3 ^ ^ / +
"""
postlist = []
opstack = []
for x in infix.split(' '): # simplified tokenization
if x not in operators: # operand
postlist.append(x)
elif x == '(':
opstack.append(x)
elif x == ')':
op = opstack.pop()
while op != '(':
postlist.append(op)
op = opstack.pop()
else: # operator
if x in right_associative_ops:
while opstack and precedence[x] < precedence[opstack[-1]]:
postlist.append(opstack.pop())
else:
while opstack and precedence[x] <= precedence[opstack[-1]]:
postlist.append(opstack.pop())
opstack.append(x)
postlist.extend(reversed(opstack))
return ' '.join(postlist)
def eval_postfix (postfix):
""" Evaluate a postfix notation expression,
using a stack to store operands only.
"""
operandstack = []
for token in postfix.split(' '):
if token in operators:
x = operandstack.pop()
y = operandstack.pop()
z = eval('%s%s%s' % (x,token,y))
operandstack.append(z)
else:
operand = eval(token)
operandstack.append(operand)
assert len(operandstack)==1
return operandstack.pop()
【在 W***o 的大作中提到】
: 新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
: 先级?
: 以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
: 但是我的计算器界面没有括号输ru
: 谢谢赐教!
p*o
19 楼
Alternatively, you can build your own parse tree from ground up. E.g. (
assuming fully parenthesized),
class BinTree (object):
def __init__ (self, root=None, left=None, right=None):
self.root = root
self.left = left
self.right = right
def insert_left (self, obj=None):
self.left = BinTree(obj, left=self.left)
return self.left
def insert_right (self, obj=None):
self.right = BinTree(obj, right=self.right)
return self.right
def tokenized (expression):
""" Tokenize an expression (tentatively using ' ').
"""
assert isinstance(expression, str)
return expression.split()
def build_parse_tree (expression):
""" Build parse tree.
Example input '( ( 7 + 3 ) * ( 5 - 2 ) )'.
`ptree` references (the current node of the) parse tree.
`pstack` tracks parents -- note that we assume
there are one more operands than operators,
so we essentially push the root twice to avoid
popping from an empty stack at the last ')'.
"""
ptree = BinTree()
pstack = [ptree]
for token in tokenized(expression):
if token == '(':
pstack.append(ptree)
ptree = ptree.insert_left()
elif token == ')':
ptree = pstack.pop()
elif token in ('+', '-', '*', '/'): # operators
ptree.root = token
pstack.append(ptree)
ptree = ptree.insert_right()
else: # operands
ptree.root = token
ptree = pstack.pop()
return ptree
def eval_parse_tree (ptree):
""" Evaluate a parse tree via postorder traversal.
"""
assert isinstance(ptree, BinTree)
if ptree.left and ptree.right:
leftval = eval_parse_tree(ptree.left)
rightval = eval_parse_tree(ptree.right)
# Or just `return eval('%f%s%f' % (leftval, ptree.root, rightval))`
import operator as op
fop = {'+': op.add, '-': op.sub, '*': op.mul, '/': op.div,}
return fop[ptree.root](leftval, rightval)
else:
return float(ptree.root)
def get_expression (ptree):
""" Get/Print the parse tree into an expresion
via inorder traversal.
"""
assert isinstance(ptree, BinTree)
if ptree:
if ptree.left and ptree.right:
return '(%s%s%s)' % (
get_expression(ptree.left),
ptree.root,
get_expression(ptree.right)
)
else:
return ptree.root
if __name__ == '__main__':
pt = build_parse_tree('( ( 7 + 3 ) * ( 5 - 2 ) )')
print get_expression(pt)
print eval_parse_tree(pt)
【在 p**o 的大作中提到】
:
: You may define the precedence levels for operators. E.g.,
: precedence = {
: '(': 0, ')': 0,
: '+': 1, '-': 1,
: '*': 2, '/': 2, '//': 2, '%': 2,
: '^': 3, '**': 3,
: }
: operators = set(precedence.iterkeys())
: right_associative_ops = {'^', '**',}
b*9
21 楼
基本算法database已经说了,用算符优先级算法,相当于把中缀转后会缀表达式。如果
计算器的操作符很多需要扫一下计算器的语法生成一个有向图计算所有操作符栈内和栈
外的优先级,不多的话手算下就可以。具体请参考龙书前几章。
计算器的操作符很多需要扫一下计算器的语法生成一个有向图计算所有操作符栈内和栈
外的优先级,不多的话手算下就可以。具体请参考龙书前几章。
W*o
23 楼
very helpful, thanks a lot!
【在 p**o 的大作中提到】
:
: Alternatively, you can build your own parse tree from ground up. E.g. (
: assuming fully parenthesized),
: class BinTree (object):
: def __init__ (self, root=None, left=None, right=None):
: self.root = root
: self.left = left
: self.right = right
: def insert_left (self, obj=None):
: self.left = BinTree(obj, left=self.left)
【在 p**o 的大作中提到】
:
: Alternatively, you can build your own parse tree from ground up. E.g. (
: assuming fully parenthesized),
: class BinTree (object):
: def __init__ (self, root=None, left=None, right=None):
: self.root = root
: self.left = left
: self.right = right
: def insert_left (self, obj=None):
: self.left = BinTree(obj, left=self.left)
e*o
26 楼
找本 compiler theory 翻翻吧。
m*7
27 楼
我咋没看明白楼主要干啥呢?
是要
1. 写一个计算器软件,不给用户输入括号的地方,但是还要求支持用户使用括号改变
运算顺序?
2. 写一个计算器软件,能够分析不带括号的表达式?
是要
1. 写一个计算器软件,不给用户输入括号的地方,但是还要求支持用户使用括号改变
运算顺序?
2. 写一个计算器软件,能够分析不带括号的表达式?
t*t
29 楼
在不带括号的情况下, 表达式的分析就是分析某个算子是和前面的操作符结合还是后面
的操作符结合. 用C语言的术语来说, 优先级高的先结合, 优先级一样的, 看结合性.
比如:
1+2*3 ==> 1+(2*3)
1*2+3 ==> (1*2)+3
1-2-3 ==> (1-2)-3 [-是左结合的操作]
a=b=c ==> a=(b=c) [=是右结合的操作]
【在 W***o 的大作中提到】
: 新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
: 先级?
: 以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
: 但是我的计算器界面没有括号输ru
: 谢谢赐教!
的操作符结合. 用C语言的术语来说, 优先级高的先结合, 优先级一样的, 看结合性.
比如:
1+2*3 ==> 1+(2*3)
1*2+3 ==> (1*2)+3
1-2-3 ==> (1-2)-3 [-是左结合的操作]
a=b=c ==> a=(b=c) [=是右结合的操作]
【在 W***o 的大作中提到】
: 新手在做一个简单计算器,用户可以输入 类似 2 + 3 * 4 / 5 + 7 这种,怎么判断优
: 先级?
: 以前看到过带括号的算法,比如((1 + 2) * 3 + 2) / 2,知道能用两个Stack解决。
: 但是我的计算器界面没有括号输ru
: 谢谢赐教!
相关阅读
清华CS排名甩Princeton一条街王垠:微软感受 (转载)vs2015: ADO.NET Entity Data Model Designer没了 (转载)github当机了meteor和parse server是什么关系?希拉里脑子出了MultiThread Bug (转载)谁能用本科生就能理解的语言解释图灵机和拉姆达计算的区别求助 VS code 在虚拟机里面怎么一片黑?设计一个publish/subscribe servicepython 画图哪个库最好用?angular 2 还不是正是发布?熟微软Exchange系统的大牛来看看怎么完成这任务CNN和template matching到底有啥区别C#, recruiter发过来的面试题 (转载)如果能够保证kafka的broker不被flood?一个Deep Learning的talk请教个javascript的问题 (转载)斧头帮又來BB下ML硅谷的40岁危机:年过四旬在硅谷求职将不再顺利? 华尔街见闻 ugmbbc 1天3小时前 对于平均年龄只有二三十岁的互联网公司来说,大多数人可能还没有考虑过职业危机。但对大龄人士而言,就职互联网公司确实存在挑战。彭博最近的一篇文章讲述了硅谷的40岁危机,其中提到,年过四旬后你可能会发现自己在硅谷的求职过程中不再那么顺利。尽管美国劳动人口的年龄中位数是42岁,但是苹果的雇员年龄中位数只有31岁,谷歌和特斯拉是30岁,FaceBook和LinkedIn只有29岁。 年轻化所带来的结果就是,年龄稍长的人士如果想要在这些科技公司就职,可能不得不竭力适应上司比自己年龄小一轮的尴尬。上述文章称,想通过置换行头让自己看起来更年轻,这招现在在硅谷已经行不通了。他们可能必须做出更大的牺牲才能跟上同事的节奏,例如补上关于卡戴珊的最新八卦,看所有的最新超级英雄电影,花很长的时间研究那么最新的流行用语等等,更夸张的是通过整形来让自己更年轻。彭博: 当年逾50岁Rodriguez去面试时,她会选择颜色明亮的毛衣或者夹克搭配半身裙,而不是之前严肃的套装。她开始定期在Reddit、 Yelp,、IMDb和MSNBC上浏览资讯,在城市词典(Urban Dictionary)上查找她不认识的俚语,这样她就可以和其他人谈论那些超级英雄电影、金州勇士队还有卡戴珊。 她在LinkedIn上有500个联系人,她现在也开始使用Twitter、 Pinterest、 Snapchat和博客。一家名为Aruba的无线设备制造商的人事经理看到了她的博客,后来Rodriguez就成了这家公司的销售培训师。 另一个例子是美国圣何塞一位60岁的软件工程师,他今年1月被前东家解雇,他在那家芯片制造企业工作了7年。现在他穿着休闲装和运动鞋去公司面试,他在当地的培训学校学习嵌入式系统,并且把灰色的头发染成了深褐色,此外他还去割了眼袋,除掉黑眼圈。 他说,如果你还想继续在一个到处都是20多岁的年轻人的行业里工作,让自己看上去更年轻是一个聪明的选择。“我依然想在科技行业工作,因为我喜欢解决问题,而且我现在储蓄无法支撑退休后的生活。” 其中一些大龄员工选择了比较激烈的方式表达自己的需求。彭博报道指出,硅谷公司目前面临的年龄歧视诉讼超过了种族歧视和性别歧视: 并不是所有的大龄员工都保持沉默。从2008年到去年为止,硅谷150家大型科技公司共面临226起年龄歧视的诉讼,这是加州公平就业与住房部的数据,这样数字比种族歧视诉讼案高28%,比性别歧视案高9%。 一位惠普的前员工起诉称公司因为年龄原因解雇大量员工,原告表示正寻求代表40岁及以上的员工对惠普进行集体诉讼,明年谷歌也将面临类似诉讼,原告称谷歌在招聘过程中存在年龄偏见。 根据雇员薪酬与相关数据的提供商PayScale,美国科技公司的员工年龄中位数是32岁,不同企业差别较大(此为去年的数据,与最新的数字可能稍有差别): Facebook:28岁 谷歌、LinkedIn、Salesforce:29岁 eBay、Twitter、暴风雪娱乐:30岁 苹果、高通 :31岁 亚马孙、英伟达、雅虎:32岁 英特尔、Adobe、微软:33岁 思科、甲骨文、EMC:35岁 戴尔:36岁 IBM:37岁 惠普:40岁 活动入口: 买美股,上老虎请教一个the user profile service failed the sign-in问题