小编Ava*_*nos的帖子

Coq 归纳从特定的 nat 开始

我正在尝试学习 coq,所以请假设我对此一无所知。

如果我在 coq 中有一个引理

forall n m:nat, n>=1 -> m>=1 ...
Run Code Online (Sandbox Code Playgroud)

我想通过对 n 进行归纳。我如何从 1 开始归纳?目前当我使用“归纳n”。战术它从零开始,这使得基本语句为假,从而难以继续。

任何提示?

coq induction

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

gtk-sharp中的富文本?

有没有人知道gtk#中是否有一个richtextbox等价物或任何复制功能的方法?

我可能不需要完整的rtf支持,如果无法完成一个完整的rtf解决方案,我可能会显示多色文本.

提前致谢.

c# linux mono gtk# richtextbox

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

从seq数组创建元组.

基本上我想要获取Seq.Windowed的输出,它返回一个数组序列并将其转换为一系列元组

所以我想接受这个

[[|1;2;3|];[|4;5;6|]]
Run Code Online (Sandbox Code Playgroud)

把它变成

[(1,2,3);(4,5,6)]
Run Code Online (Sandbox Code Playgroud)

提前致谢.

f# tuples

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

对于我的用例,是否有比最小堆更快的东西?

我的用例如下:

  1. 我需要获得一组不断增长的元素中的最小值;我只需要任何迭代的最小值
  2. 我将更新最小值,之后它保证不再是最小值,但它在订单中的新位置通常不能直接计算。
  3. 我将这个新值推回到集合中,然后转到下一次迭代,在那里我查看新的 min 元素。

现在我正在以下列方式使用 std::vector 和 std::pop_heap std::push_heap 。我在向量上调用 std::pop_heap 将最小元素推到向量的后面,我得到最后一个元素的引用并更新它,然后我调用 std::push_heap 将最后一个元素移动到它的新位置. 所以我不必从 std::vector 复制结构体来更新它。有问题的结构是 16 个字节,并且可以简单地构造,它的基本结构完全由整数类型组成。

根据我的分析器和一系列问题大小,我看到的是我在 std::pop_heap 上花费了超过 75% 的 CPU 时间,在 std::push_heap 上花费了大约 10%。现在,在每个被检查的最小元素上执行的逻辑非常简单,主要包括添加和与固定输入的一些比较,所以我认为这可能和它一样好。但是,如果有一个不同的或随机的奇怪数据结构可能比我目前使用的 min_heap 更快,那么尝试一下会很有趣。

我已经尝试过 std::min_element、std::nth_element、std::sort,对于 1,000,000 或更少的问题大小,每一个都需要我当前的解决时间不到 1 秒,并将运行时间增加几个数量级(许多10 秒)。鉴于它们都具有比 std::push_heap 和 std::pop_heap 更糟糕的复杂性,我会期待这一点。

我也尝试过使用像 std::map 和 std::set 这样的树结构,但这些也会降低性能(我现在手头没有数字)。

那么对于这个用例,有人知道比 min_heap 更好的东西吗?

(不幸的是,我无法提供源代码,但鉴于 85% 的 CPU 时间都花在 pop_heap/push_heap 上,我认为无论如何它都不会非常有用)

编辑:比较运算符是两个整数类型之间的单个比较。所以它不像堆中使用的比较运算符正在做大量的工作。

c++ performance data-structures

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

f#整数浮点数模数1.0 = 1.0?

好的,我有两个功能,第一个看起来像这样:

let dlth x = float (x.ToString().Length)
Run Code Online (Sandbox Code Playgroud)

它采用浮点数并返回数字位数,该部分工作正常.第二个函数如下所示:

let droot x = ((x ** (1./(dlth x))) % 1.)
Run Code Online (Sandbox Code Playgroud)

它取一个浮点数并将其提升到等于1.0 /(位数)的幂,然后得到结果并且模数为1.0.整数应该为零.

所以对于droot 36.它需要(36.0**(1.0/2.0))这是6.0然后6.0 mod 1.0等于0.0;

现在,这个工作正常,直到我尝试编号81.0.(以及所有应该工作的81以上的数字)由于某种原因返回1.0,抛弃我的模式匹配.任何人都可以告诉我为什么会这样吗?

PostScript:这是Project Euler解决方案的一部分.如果您知道哪个问题,请不要发布Project Euler解决方案.我只需要帮助弄清楚为什么模数会返回有趣的结果

.net math f# modulo

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

标签 统计

f# ×2

.net ×1

c# ×1

c++ ×1

coq ×1

data-structures ×1

gtk# ×1

induction ×1

linux ×1

math ×1

modulo ×1

mono ×1

performance ×1

richtextbox ×1

tuples ×1