小编Cha*_* Xu的帖子

如何在网页中使用计算机现代字体?

我从来没有在任何网页上看到Computer Modern字体,这是LaTeX类型设置系统的默认字体.

如何更改CSS以使字体实际工作?

css fonts

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

点集子集的最小周长凸包

给出飞机上的n个点.No 3是共线的.

给定数k.

找到k个点的子集,使得k个点的凸包具有k个点的子集的任何凸包的最小周长.

我可以想到一个天真的方法在O(n ^ kk log k)中运行.(找到大小为k的每个子集的凸包并输出最小值).

我认为这是一个NP问题,但我找不到任何适合减少的东西.

有人对这个问题有什么想法?

一个例子,

the set of n=4 points {(0,0), (0,1), (1,0), (2,2)} and k=3
Run Code Online (Sandbox Code Playgroud)

结果:

{(0,0),(0,1),(1,0)}
Run Code Online (Sandbox Code Playgroud)

由于该组包含3个点,因此结果的凸包和周长小于任何其他3个点的周长.

algorithm convex-hull computational-geometry

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

在Haskell中编写以下程序的更好方法

我正在写一个减少自由词的函数.可以将其视为以下算法:

想法是取消列表中的项目,如果它们彼此为负并且彼此相邻.反复应用,直到无法取消.例如[-2,1,-1,2,3] - > [ - 2,2,3] - > [3]

我写了以下代码.它看起来并不优雅.它使用了head,tail多次,并且这个函数的输入共有3个模式,如果它可以减少到2就很好.我想知道是否有更优雅的方法在Haskell中编写它.我怀疑我可以使用折叠,但我不知道如何自然地做到这一点.

freeReduce []  = []
freeReduce [x] = [x]
freeReduce (x:xs)
  | x == -(head xs) = freeReduce (tail xs)
  | otherwise       = if' (rest == [])
                          [x]
                          (if' (x == - (head rest)) (tail rest) (x:rest))
  where rest = freeReduce xs
Run Code Online (Sandbox Code Playgroud)

haskell

15
推荐指数
4
解决办法
853
查看次数

Haskell中的定点组合子

根据定义,定点组合器并不总能产生正确的答案:

fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)

以下代码不会终止:

fix (\x->x*x) 0
Run Code Online (Sandbox Code Playgroud)

当然,fix不能总能产生正确的答案,但我很纳闷,这可以改进吗?

当然,对于上面的例子,可以实现一些看起来像的修复

fix f x | f x == f (f x)  = f x
        | otherwise       = fix f (f x)
Run Code Online (Sandbox Code Playgroud)

并给出正确的输出.

是什么原因导致上面的定义(或更好的东西,因为这个只有1个参数的句柄功能)不被使用?

haskell fixed-point-iteration fixpoint-combinators

12
推荐指数
3
解决办法
3644
查看次数

如何在没有循环的情况下计算APL或J中元素的频率

假设我有两个列表,一个是文本t,一个是字符列表c.我想计算每个字符出现在文本中的次数.

使用以下APL代码可以轻松完成此操作.

+?t?.=c
Run Code Online (Sandbox Code Playgroud)

但它很慢.它取外部产品,然后对每列进行求和.

这是一个O(nm)的算法,其中n和m是大小tc.

当然我可以在APL中编写一个t逐字符读取的程序程序,并在O(n + m)中解决这个问题(假设完美哈希).

有没有办法在没有循环(或条件)的APL中更快地完成这项工作?我也接受J的解决方案.

编辑: 实际上,我这样做的地方是文本比字符列表短得多(字符是非ascii).我正在考虑文本的长度为20,字符列表的长度为数千.

如果n小于m,则有一个简单的优化.

w  ? (?t)?c
f ?  +?t?.=w
r ? (?c)?0
r[c?w] ? f
r
Run Code Online (Sandbox Code Playgroud)

w只包含t中的字符,因此表大小仅取决于t而不取决于c.该算法在O(n ^ 2 + m log m)下运行.其中m log m是进行交叉运算的时间.

但是,如果有人提供了大量的文本文件,则仍然优选使用次二次算法.

j apl

10
推荐指数
3
解决办法
1029
查看次数

数组的就地排列遵循此规则

假设有一个数组,我们想要找到奇数索引中的所有内容(索引从0开始),并将其移动到最后.偶数索引中的所有内容都将其移至开头.保留所有奇数索引项和所有偶数索引项的相对顺序.

即如果阵列是

a1 b1 a2 b2 ...  an bn    
Run Code Online (Sandbox Code Playgroud)

手术后就变成了

a1 a2 a3 ... an b1 b2 ... bn
Run Code Online (Sandbox Code Playgroud)

这可以在O(n)时间内就地完成吗?

algorithm

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

在Haskell中生成所有整数的无限列表的好方法是什么?

我在haskell中编写了以下函数,因为它将枚举每个整数:

integers = (0:)$ concat $ zipWith (\x y -> [x,y]) [1..] (map negate [1..])
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点,看起来确实有点过于复杂.

另外,我想知道是否有标准实现来列出维度$ k $的整数点阵中的所有元素.

haskell

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

真的是最低限度

什么是所需的最小原语集,以便语言是图灵完整的和lisp变体?

看起来像汽车,cdr和一些流量控制和REPL的东西就足够了.如果有这样的清单那就好了.

假设只有3种类型的数据,整数,符号和列表.(如在picolisp中)

lisp turing-complete

7
推荐指数
3
解决办法
2685
查看次数

给定字符串s,找到最短的字符串t,使得t ^ m = s

给定字符串s,找到最短的字符串t,使得t ^ m = s.

例子:

s="aabbb" => t="aabbb"
s="abab"  => t = "ab"
Run Code Online (Sandbox Code Playgroud)

它能以多快的速度完成?

当然天真地,对于每m个除| s |,我可以尝试子串(s,0,| s |/m)^ m = s.

可以在O(d(| s |)n)时间内找出解,其中d(x)是s的除数.可以更有效地完成吗?

string algorithm

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

在APL中定义普适函数

如何在APL中定义普适函数?

我做的是

function?{
    (??(????)){the function that apply to scalar}¨?
}
Run Code Online (Sandbox Code Playgroud)

我认为应该有一个更好的方法,我没有看到它.

apl

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