Redian新闻
>
问个树遍历的线程化问题
avatar
问个树遍历的线程化问题# Programming - 葵花宝典
b*n
1
Fibonacci序列的Recursive的那个算法
我回答 O(N)
好像不对呀
avatar
d*a
2
从北京到美国甲地,然后转机去乙地
我记得过了关后,需要拿行李(大箱子),然后把行李放到一个传送带上(机场会把行
李放在去乙地的飞机上),然后进入美国国内候机厅(不用过安检)
我的记忆是否正确?
avatar
k*u
3
cape cod beach
avatar
C*a
4
自己的母语不说了
汉语说得基本和母语一个档次
这个英语也字正腔圆的
看阿妹真是受用的狠啊
avatar
b*i
6
纠正了:先描述一下树:
一个多叶子的树,每个节点有多个下层节点。每一个节点也有一个指针指向同层下一个
节点。这个图无法看,可以复制到notepad上看
1--2--3--4
| | | |
| | | 5
| | | |
| | | 6
| | |
| | 7--8
| | |
| | 9
| | |
| | A
| |
| B--C--D
| | |
| | E
| |
| F--G
| |
| H
|
I--J--K--L
如果要遍历1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-G-H-I-J-K-L,并且进行处理则有如下程序
traverse(head){
if (head->needed){
action(head);
wait(50);
if (quit) return;
if (head->deeper)
traverse(head->deeper);
}
head=head->next;
while(head){
traverse(head);
head=head->next;
}
}
要求多线程化这个遍历过程。假定有一个函数getNext,根据current指针来给出下一个
节点需要处理的节点(如果没有,给出原来节点),那么我的工人线程就是这样的
void worker(){
Node* next = getNext(current);
if (next->needed){
action(next);
wait(50);
current=next;
if (quit) return;
}
}
其他要求:
1 要持续化,就是L之后下一个是1,然后2,接着来。
2 每进行一个action,要等50毫秒
3 不是每个节点都要处理,有的不要处理,由needed决定。不处理的节点不要等50毫秒
4 如果每个节点都不要处理,那么就还是要等50毫秒,不能无限循环下去
5 每次50毫秒等待后,有机会判断是否应该退出线程
6 不需要处理的节点其下层节点都不用处理,但是需要尝试处理其同层下一个节点并继续
我目前想到两个方案:一个是写一个遍历的单步iterator函数getNext,有相应的术语
吗?英文叫什么?另一个是,在原来递归函数traverse的基础上,直接等待,和衔接I-
1。但是我怎么避免无限循环没有想好。
我想getNext应该基于堆栈,那么哪个思路好?
系统是Linux, 用C++11,内存512M,ARM。
avatar
g*y
7
算单个的F(n)?
algorithmics以前给过一个很好的logN的方法算单个的F(n)

【在 b*********n 的大作中提到】
: Fibonacci序列的Recursive的那个算法
: 我回答 O(N)
: 好像不对呀

avatar
H*r
8
avatar
h*e
9
wow, the blue sky is amazing!!
avatar
r*d
10
country roads 唱的不错
据说他母语和英语发音习惯相似

【在 C****a 的大作中提到】
: 自己的母语不说了
: 汉语说得基本和母语一个档次
: 这个英语也字正腔圆的
: 看阿妹真是受用的狠啊

avatar
b*n
12
对,算单个的F(n)
电话面试让我口述recursive算法程序,
然后跟着问我复杂度
我就不是很明白recursive算法的复杂度

【在 g*******y 的大作中提到】
: 算单个的F(n)?
: algorithmics以前给过一个很好的logN的方法算单个的F(n)

avatar
m*e
13
nice
avatar
C*a
14
难怪啊
他是什么族的?哈萨克是吗?

【在 r*******d 的大作中提到】
: country roads 唱的不错
: 据说他母语和英语发音习惯相似

avatar
H*M
16
...
exponential for recursive one
using a dp way, you can get o(n)
using a matrix multiplication way o(lgn)
seems there is also a explicit formular for that, O(1)?

【在 b*********n 的大作中提到】
: 对,算单个的F(n)
: 电话面试让我口述recursive算法程序,
: 然后跟着问我复杂度
: 我就不是很明白recursive算法的复杂度

avatar
g*y
17
是有通项公式,不过计算那个通项公式,要算某个数的n次方,就是说跟matrix
multiplication其实是一样的复杂度。

【在 H*M 的大作中提到】
: ...
: exponential for recursive one
: using a dp way, you can get o(n)
: using a matrix multiplication way o(lgn)
: seems there is also a explicit formular for that, O(1)?

avatar
H*M
18
yeah yeah. my bad

【在 g*******y 的大作中提到】
: 是有通项公式,不过计算那个通项公式,要算某个数的n次方,就是说跟matrix
: multiplication其实是一样的复杂度。

avatar
s*s
19
Fib has analytical solution,
the running time for recusion is about o(golden ratio^n)

【在 b*********n 的大作中提到】
: Fibonacci序列的Recursive的那个算法
: 我回答 O(N)
: 好像不对呀

avatar
m*f
20
算单个F(n)最好的logn方法是利用矩阵乘方, 是算法导论的作者上课的时候给的
http://www.verycd.com/topics/87348/

【在 g*******y 的大作中提到】
: 算单个的F(n)?
: algorithmics以前给过一个很好的logN的方法算单个的F(n)

avatar
m*0
21
theta([(sqrt(5)+1)/2)^n])
matrix : theta(log n)

【在 b*********n 的大作中提到】
: Fibonacci序列的Recursive的那个算法
: 我回答 O(N)
: 好像不对呀

avatar
m*0
22
1 1
1 0
的n次方
就是
f(n+1) f(n)
f(n) f(n-1)

【在 g*******y 的大作中提到】
: 算单个的F(n)?
: algorithmics以前给过一个很好的logN的方法算单个的F(n)

avatar
a*n
23
O(n) 用两个变量存储fn fn-1
avatar
H*r
24
This should be O(1)?
http://en.wikipedia.org/wiki/Fibonacci_number
Computation by rounding
Since \begin{matrix}|1-\varphi|^n/\sqrt 5 < 1/2\end{matrix} for all n\geq 0,
the number F(n) is the closest integer to \varphi^n/\sqrt 5\, . Therefore
it can be found by rounding, or in terms of the floor function:
F(n)=\bigg\lfloor\frac{\varphi^n}{\sqrt 5} + \frac{1}{2}\bigg\rfloor,\ n
\geq 0.

【在 b*********n 的大作中提到】
: Fibonacci序列的Recursive的那个算法
: 我回答 O(N)
: 好像不对呀

avatar
m*0
25
题目问的不是你说的,
问的是recursive的复杂度。
golden ratio ^ n

【在 a****n 的大作中提到】
: O(n) 用两个变量存储fn fn-1
avatar
g*y
26
算recursive的复杂度,其实跟算fibonacci数本身,几乎是一样的
假设recursive算f(n)的steps是g(n)的话
g(n) = g(n-1) + g(n-2) + O(1)
特征值仍然是 (1 +/- sqrt(5))/2,用算fibonacci通项式的同样方法算出g(n)的通项
式就行了
avatar
x*y
27
Can you give some details? thanks..

【在 g*******y 的大作中提到】
: 算单个的F(n)?
: algorithmics以前给过一个很好的logN的方法算单个的F(n)

avatar
g*y
28
someone already did in her reply... you may wanna read this post more
closely

【在 x***y 的大作中提到】
: Can you give some details? thanks..
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。