小编Plo*_*rzz的帖子

内存分配的递归

我正在观看有关CUDA和Barnes-Hut算法的视频,其中声称有必要对GPU的树放置深度限制,然后想法可能会在堆中进行递归.

基本上,我只是想知道:是否有可能从堆中分配内存并将其用作临时"堆栈",在该堆栈中对有问题的递归函数进行函数调用以稍微延迟堆栈溢出?

如果是这样,如何实现,我们是否会为指向函数的指针分配空间?我假设它会涉及在堆中存储函数地址但是我不太确定.

[编辑]我只是想补充一点,这纯粹是一个理论问题,我想这样做会导致程序在使用堆时减慢速度.

[编辑]根据请求,我使用的编译器是Ubuntu 14.04(64位)上的GCC 4.8.4

c heap recursion memory-management

6
推荐指数
1
解决办法
488
查看次数

整数除法算法分析

对于赋值,我们需要编写除法算法,以便仅使用加法和递归来完成某个问题.我发现,在不使用尾递归的情况下,天真的重复减法实现很容易导致堆栈溢出.所以快速分析这个方法,如果我错了就纠正我,这表明如果你将A除以B,分别用n和m二进制数,它应该是以nm为指数.我真的得到了

O( (n-m)*2^(n-m) ) 
Run Code Online (Sandbox Code Playgroud)

因为需要为了在n位数字下降到的n-1位的数字从n个二进制位的数字减去一个m二进制位数2 ^(nm)的倍,则需要执行此纳米次以得到一个数字在重复减法除法中最多有m个数字,因此运行时应该如上所述.再说一次,我很可能是错的,所以有人请你纠正我,如果我.这是假设O(1)加法,因为我正在使用固定大小的整数.我想用固定大小的整数可以说算法是O(1).

回到我的主要问题.我开发了一种不同的方法来执行整数除法,即使在递归地使用它时,它也可以更好地工作,基于for的想法

P = 2^(k_i) + ... 2^(K_0)

我们有

A/B = (A - B*P)/B + P
Run Code Online (Sandbox Code Playgroud)

该算法如下进行A/B:caclulate :

input:
    A, B

    i) Set Q = 0

   ii) Find the largest K such that B * 2^K <= A < B * 2(K + 1)

  iii) Q -> Q + 2^K

   iv) A -> A - B * 2^k

    v) Repeat steps ii) through iv) until A <= B

   vi) Return Q …
Run Code Online (Sandbox Code Playgroud)

c algorithm runtime

3
推荐指数
1
解决办法
859
查看次数

如何从列表中删除所有某些数据类型?

我在从字符串和整数列表中仅删除字符串时遇到麻烦。这看似愚蠢,但这是事实:

>>> A = [1, '2', '3', 4, '5', '4', 6, 56, 7, '4', 6, '543']
>>> 
>>> for i in A:
        if type(i) is str:
                    A.remove(i)


>>> A
[1, '3', 4, 6, 56, 7, '4', 6]
Run Code Online (Sandbox Code Playgroud)

是否有人对正在发生的事情有任何想法,或者我只是做错了什么?

python string list

1
推荐指数
1
解决办法
2102
查看次数

标签 统计

c ×2

algorithm ×1

heap ×1

list ×1

memory-management ×1

python ×1

recursion ×1

runtime ×1

string ×1