标签: recursive-datastructures

我在Python中使用什么来实现最大堆实现?

Python包含用于min-sheaps的heapq模块,但我需要一个最大堆.我应该在Python中使用什么来实现max-heap实现?

python heap recursive-datastructures data-structures

197
推荐指数
10
解决办法
10万
查看次数

通过为对象引用打印"[...]",Python意味着什么?

我正在打印一个我认为是列表的值,但我得到的输出是:

[...]
Run Code Online (Sandbox Code Playgroud)

这代表什么?我该如何测试呢?我试过了:

myVar.__repr__() != '[...]'
Run Code Online (Sandbox Code Playgroud)

myVar.__repr_() != Ellipsis
Run Code Online (Sandbox Code Playgroud)

但没有骰子......

这是给出问题的代码的缩减:

def buildPaths(graph, start, end, path=[], totalPaths=[]):
    """
    returns list of all possible paths from start node to the end node
    """
    path = path + [start]
    if start == end:
        return path
    for nextNode in graph.childrenOf(start):
        if nextNode not in path:
            newPath = buildPaths(graph, nextNode, end, path, totalPaths)
            if newPath != []: # test
                totalPaths.append(newPath)
    return totalPaths
Run Code Online (Sandbox Code Playgroud)

totalPaths包含很多所谓的递归列表,但我不明白为什么.我在#test修改了测试以防止这种情况发生.

我也尝试过:

def buildPaths(graph, thisNode, end, path=[], totalPaths=None):
    """
   returns list …
Run Code Online (Sandbox Code Playgroud)

python recursion ellipsis recursive-datastructures

48
推荐指数
4
解决办法
3145
查看次数

掌握递归编程

我在思考/解决递归问题时遇到了麻烦.我真的很欣赏这个概念,我可以理解它们,比如创建基本案例,退出案例和递归调用等.我可以解决简单的问题,比如在数组中编写阶乘或整数求和.这就是我的想法停止的地方.当问题变得复杂时,我无法真正应用概念或提出解决方案.例如,河内的塔,虽然我能理解问题和解决方案,但我,我自己无法解决问题.它也适用于其他算法,如快速排序/二叉树遍历.所以我的问题是

  1. 掌握它的最佳方法是什么?
  2. 任何人都可以建议一系列问题或问题,我可以将其作为练习来练习吗?
  3. 学习功能语言会帮助我理解吗?

请指教.

algorithm recursion recursive-datastructures data-structures

42
推荐指数
2
解决办法
2万
查看次数

使用自引用类型提示创建递归数据类

我想用 Python 编写数据类定义,但无法在声明中引用同一类。

我主要想要实现的是这个嵌套结构的类型,如下图所示:

 @dataclass
 class Category:
     title: str
     children: [Category] # I can't refer to a "Category"
  
 tree = Category(title='title 1', children=[
     Category('title 11', children=[]),
     Category('title 12', children=[])
 ])
Run Code Online (Sandbox Code Playgroud)

python type-hinting recursive-datastructures python-dataclasses

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

Ed Kmett的递归方案包中的Fix,Mu和Nu有什么区别

在Ed Kmett的recursion-scheme包中,有三个声明:

newtype Fix f = Fix (f (Fix f))

newtype Mu f = Mu (forall a. (f a -> a) -> a)

data Nu f where 
  Nu :: (a -> f a) -> a -> Nu f
Run Code Online (Sandbox Code Playgroud)

这三种数据类型有什么区别?

haskell recursive-datastructures recursion-schemes fixpoint-combinators

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

从路径列表填充树视图

我正在尝试从文件夹路径列表填充树视图,例如:

C:\WINDOWS\addins
C:\WINDOWS\AppPatch
C:\WINDOWS\AppPatch\MUI
C:\WINDOWS\AppPatch\MUI\040C
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409
Run Code Online (Sandbox Code Playgroud)

像这样的输出:

????addins
????AppPatch
?   ????MUI
?       ????040C
????Microsoft.NET
?   ????Framework
?       ????v2.0.50727
?           ????MUI
?               ????0409
Run Code Online (Sandbox Code Playgroud)

请注意列表中没有'C:\ WINDOWS\Microsoft.NET'或'C:\ WINDOWS\Microsoft.NET\Framework'.我已经工作了将近两天,我的代码中有一堆bug.希望我能从这里得到帮助.

谢谢.

埃里克

.net c# vb.net treeview recursive-datastructures

21
推荐指数
5
解决办法
3万
查看次数

在Python中混淆列表:它是什么?

所以我用Python写了一个简单的二叉树,遇到了[...]

我不相信这与Ellipsis对象有关,它似乎与无限循环有关(由于Python的浅拷贝?).这个无限循环的来源以及为什么它在被访问时扩展时不会被扩展是我完全迷失的东西

>>> a
[[[[[], [], 8, 3], [[], [], 3, 2], 6, 3], [], 1, 4], [[], [], -4, 2], 0, 0]
>>> Keys(a)#With a+b
[0, 1, 6, 8, 3, -4]
>>> Keys(a)#With [a,b]
[8, [...], [...], 3, [...], [...], 6, [...], [...], 1, [...], [...], -4, [...], [...], 0, [...], [...]]
>>> Keys(a)[1]#??
[8, [...], [...], 3, [...], [...], 6, [...], [...], 1, [...], [...], -4, [...], [...], 0, [...], [...], 8, [...], [...], 3, [...], [...], 6, …
Run Code Online (Sandbox Code Playgroud)

python recursion list recursive-datastructures

17
推荐指数
4
解决办法
2391
查看次数

在C中初始化循环数据.这个有效的C代码是否符合任何标准?

我想看看我是否可以初始化一个全局变量来指向自己:

#include <stdio.h>
struct foo { struct foo *a, *b; } x = { &x, &x };
int main()
{
    printf("&x = %p, x.a = %p, x.b = %p\n", &x, x.a, x.b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码编译并按预期运行gcc(所有三个指针打印相同).

我想知道:

  1. 这可靠吗?
  2. 这是标准吗?
  3. 这是便携式吗?

编辑:只是为了澄清,我质疑x其自己的初始化程序中的地址的可用性.

c gcc recursive-datastructures circular-reference static-initialization

16
推荐指数
2
解决办法
302
查看次数

为什么归纳数据类型禁止类型如`data Bad a = C(Bad a - > a)`其中类型递归发生在 - >?之前?

关于归纳数据类型和模式匹配的 Agda手册:

为确保正常化,归纳事件必须出现在严格的正位置.例如,不允许以下数据类型:

data Bad : Set where
  bad : (Bad ? Bad) ? Bad
Run Code Online (Sandbox Code Playgroud)

因为构造函数的参数中存在负面的Bad.

为什么归纳数据类型需要此要求?

haskell y-combinator recursive-datastructures algebraic-data-types agda

16
推荐指数
2
解决办法
958
查看次数

如何动态分配循环数据?

为了举例,让我们定义一个玩具自动机类型:

data Automaton =
  Auto
    { success ::
      Automaton
    , failure ::
      Automaton
    }
Run Code Online (Sandbox Code Playgroud)

这个结构被设计成循环的,我们可以把每一个Automaton状态想象成一个成功和失败的状态转换到其他状态。因此有限自动机必须递归定义。例如,这是最简单的自动机:

sink =
  Auto sink sink
Run Code Online (Sandbox Code Playgroud)

它由 1 个总是转换到自身的状态组成。如果我们愿意,我们可以制作更复杂的自动机:

-- Transitions to a sink once it encounters a failure
otto1 =
  Auto otto1 sink

-- Mutually recursive automata
otto2 =
  Auto otto2 otto3

otto3 =
  Auto otto3 otto2
Run Code Online (Sandbox Code Playgroud)

这些都很好。但接受用户输入并构建一个自动机可能会更好。例如,可以从转换矩阵中构建一个。这是一个简单的实现:

fromTransition :: [(Int, Int)] -> Automaton
fromTransition tMatrix =
  go 0
  where
    go n =
      let
        (succ, fail) =
          tMatrix !! n
      in
        Auto (go …
Run Code Online (Sandbox Code Playgroud)

haskell memory-management recursive-datastructures

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