小编xzh*_*zhu的帖子

找到一种算法来赢得这场打击犯罪的斗争!

在城市犯下的罪行和犯罪嫌疑人开始逃跑.给出了城市地图.目前,某些地方有一些警车,他们试图阻止嫌犯.警察的汽车和嫌疑人的最高速度相同.如果嫌疑人比任何一辆警车更早到达,嫌疑人只能通过一个点.地图中有几个出口,如果他到达任何一个,嫌疑人就会逃避.找到一个分配警车的算法,这样嫌疑人就无法逃避.

例如,下面是一个可能的城市地图.

在此输入图像描述

白色圆圈是嫌疑人开始的地方,黑色圆圈是警车,小方块是出口.在这种情况下,可以阻止嫌疑人.一个可能的计划是警车A前往A',B停留和C前往C'.


我的问题的等效描述可能是:

一个化学工厂(用白色圆圈标记)爆炸,有毒液体开始以各种可能的方向高速流动,v救援队(标有黑圈)的最高速度也v试图阻挡它.小广场是他们正在保护的村民.


我的想法

如果我们有n警车,一种非常低效的方法是列出所有可能的 - k元素P顶点子集,这样:

a)k <= n;

b)删除P地图中的所有顶点将导致任何出口无法到达嫌疑人;

c)删除任何适当的子集,P让至少一个出口可以到达嫌疑人.

然后我们可以很容易地确定P警察是否可以在不迟于嫌疑人的情况下覆盖每个顶点.

但是如何列出所有可能的Ps?


@Lior Kogan:

看看这张地图:

在此输入图像描述

如果这是一个双方都知道其他战略的转身游戏,那么警察就会赢,因为他可以保护嫌犯所在的一方.

但在我的问题上,警察输了,因为他永远不知道嫌犯可能选择哪一方.

algorithm graph

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

如何在"Monad"循环中"继续"?

通常我发现自己需要在Haskell 中跳过迭代的其余部分(比如continue在C中):

forM_ [1..100] $ \ i ->
    a <- doSomeIO
    when (not $ isValid1 a) <skip_rest_of_the_iteration>
    b <- doSomeOtherIO a
    when (not $ isValid2 b) <skip_rest_of_the_iteration>
    ...
Run Code Online (Sandbox Code Playgroud)

但是,我没有找到一个简单的方法.我所知道的唯一方法可能是Trans.Maybe,但是有必要使用monad变换来实现如此微不足道的东西吗?

haskell

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

如何使用Mathematica 8找到加权二分图的最小边缘覆盖?

在图论中,我们使用匈牙利算法来计算加权二分图的最小边缘覆盖(一组入射到每个顶点的边,即总重量最小的边).

我发现在Mathematica的新版本8中,图形理论有一个全新的函数包,(以Graph []开头.)但是我没有找到任何能完成这项工作的函数.我找到了一个名为FindEdgeCover []的函数,它只能找到边缘覆盖,而不是最小覆盖.

wolfram-mathematica graph

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

从列表列表中按最后一个元素选择最大值的最佳方法是什么?

在Mathematica中,Max[]获取数字列表中的最大数字是最有效的函数,但是如何在列表列表中找到具有最大最后一个元素的列表?例如,x在一系列坐标中具有最大部分的2-d 坐标.

我最好的尝试是SortBy,但显然我不需要程序来排序我的列表,只需要我需要的最大值.

wolfram-mathematica

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

python是否有这个简单任务的简写?

我刚刚开始学习长期听到的python语言.我之前一直在和C合作.我发现python,因为现代脚本语言在各种任务上都非常简洁.

所以我想知道,如果我有一个列表foo = [1, 2, 3, 4, 5],我想从中挑出所有奇数bar.在C中,我可能会使用循环并检查每个数字foo并复制所需的元素bar.你们这些"蟒蛇式"的做法是什么?

python

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

如何隐式导入常用模块?

最近我在Haskell中编写了很多脚本.这是一次非常愉快的体验,因为它是我曾经触及过的最简洁的语言之一.

但是,困扰我的一件事是,我必须为import我编写的每个脚本键入相同的s,并且我几乎每次都使用一组模块,例如

import Control.Monad as MO
import Data.ByteString.Lazy as BS
import Data.Char as CH
import Data.Csv as C
import Data.Csv.Streaming as CS
import Data.Foldable as FOLD
import Data.Functor as F
import Data.List as L
import Data.List.Split as LS
import Data.Text.Lazy as T
import Data.Text.Lazy.IO as TI
import Data.Vector as V
import Debug.Trace as TR
import Prelude as P
Run Code Online (Sandbox Code Playgroud)

我的意思是我每次都可以复制和粘贴它们,但有没有办法可以隐藏这些繁琐的进口?就像Prelude隐含进口一样?

haskell

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

为什么`效果'只能密封两个流入,而不是所有的流量?

这是包Effect的官方教程中提供的图表pipes.

 type Effect = Proxy X () () X

  Upstream | Downstream
     +---------+
     |         |
 X  <==       <== ()
     |         |
 () ==>       ==> X
     |    |    |
     +----|----+
          v
          r
Run Code Online (Sandbox Code Playgroud)

由于Effect没有任何数据流,我期待它只是Proxy X X X X,密封所有流量.但相反,它允许两个流入.这有什么特别的原因吗?如果我只是Effect通过签名来编写通常所做的事情Proxy X X X X,它可以完美地传递编译器:

myMonad :: Proxy X X X X IO ()
myMonad = do
    a <- lift $ getLine
    lift $ print a
    return ()
Run Code Online (Sandbox Code Playgroud)

为什么我们不能run这样呢?

haskell haskell-pipes

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

在 PostgreSQL 中维护有序列表的最佳方法?

假设我有一个名为 的表list,其中有item这样的 s (ids 是随机 uuid):

id  rank  text
--- ----- -----
x   0     Hello
x   1     World
x   2     Foo
x   3     Bar
x   4     Baz
Run Code Online (Sandbox Code Playgroud)

rank我想维护列始终从 到0的属性(n-1n行数)——如果客户端请求insert带有 的项目rank = 3,那么 pg 服务器应分别将当前的3和推送到4和:45

id  rank  text
--- ----- -----
x   0     Hello
x   1     World
x   2     Foo
x   3     New Item!
x   4     Bar
x …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

为什么glClear不清除我的屏幕?

这是一个简单的opengl程序.在绘制三角形之前,我正试图清除屏幕.我在我的init()函数中调用了glClear(),但它似乎无法清除屏幕.

#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

void myIdleFunc()
{
    glBegin(GL_TRIANGLES);
    {
        glColor3f(1.0f, 1.0f, 1.0f);
        glVertex2f(0.0f, 1.0f);
        glVertex2f(-1.0f, -1.0f);
        glVertex2f(1.0f, -1.0f);
    }
    glEnd();

    glFlush();

    usleep(1000000);
}

void init()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutCreateWindow("Hello, World!");

    init();

    glutIdleFunc(myIdleFunc);
    glutMainLoop();
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

这是一个屏幕截图,文本来自后面的gnome终端.

在此输入图像描述

c opengl

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

为什么freetype的渲染文本总会有一些噪音?

我正在编写一个使用freetype2作为文本渲染引擎的opengl程序.

使用它的LCD子像素渲染,我发现渲染结果中总是有一些噪声像素,为什么会发生这种情况?此外,虽然它的手册说LCD模式会产生宽度为3的倍数的缓冲区,我经常发现宽度为3n + 1或3n + 2,与之不一致face->glyph->bitmap->width.

在此输入图像描述

c opengl freetype

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