小编mar*_*nus的帖子

java中的Typeahead/Incremental Search

我们有一个搜索结果映射列表,例如一个简单的URL映射可能看起来像

"stackoverflow" - >"www.stackoverflow.com""joel" - >"www.joelonsoftware.com"

所以搜索确切的短语工作正常.

现在我们正在寻找增量搜索/预先输入,例如"stackover"也将返回"www.stackoverflow.com".我们当然可以相应地填充我们的地图,例如将每个可能的字符串放入地图中,从给定最小尺寸的所有变化开始

- >地图键:

stack - > stackoverflow ... stackoverf - > stackoverflow stackoverfl - > stackoverflow stackoverflo - > stackoverflow stackoverflow - > stackoverflow

然而,这意味着需要更高的内存占用(我猜).

有什么建议?

java search data-structures

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

如何快速计算相邻体素的数量?

我有一个3D网格(体素),其中一些体素被填充,有些则没有.3D网格稀疏地填充,因此我得到了filledVoxels具有填充体素的坐标(x,y,z)的集合.我想要做的是找出每个填充的体素,也填充了多少相邻的体素.

这是一个例子:

  • filledVoxels包含体素(1,1,1),(1,2,1)和(1,3,1).
  • 因此,邻居计数是:
    • (1,1,1)有1个邻居
    • (1,2,1)有2个邻居
    • (1,3,1)有1个邻居.

现在我有这个算法:

voxelCount = new Map<Voxel, Integer>();

for (voxel v in filledVoxels)
  count = checkAllNeighbors(v, filledVoxels);
  voxelCount[v] = count;
end
Run Code Online (Sandbox Code Playgroud)

checkAllNeighbors()查找所有26个周围的体素.所以总的来说我做了26*filledVoxels.size()查找,这很慢.

有没有办法减少所需的查找次数?当您查看上面的示例时,您可以看到我正在多次检查相同的体素,因此可以通过一些聪明的缓存来摆脱查找.

如果这有任何帮助,体素代表一个体素化的3D表面(但它可能有洞).我通常想得到一个包含5或6个邻居的所有体素的列表.

language-agnostic algorithm 3d voxels

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

"重构"的替代描述让经理高兴吗?

我的老板不想再听到重构这个词,因为每当他问一个人他在做什么时,他们会回答" 我正在重构! "

我需要找到可以让经理满意的重构的替代描述.Thesaurus.com没有找到任何重构,任何想法,当他问我在做什么时,我应该告诉他什么?

refactoring project-management

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

在控制台中等待 Visual Studio GUI

我想要一个小的批处理脚本,每当我关闭 Visual Studio GUI 时,它都会自动运行 subversion 更新,然后是 CMAKE,然后使用解决方案重新启动 Visual Studio。不幸的是,我似乎无法编写启动 Visual Studio GUI 并等到它完成。

我已经试过了

call "%VS100COMNTOOLS%\vsvars32.bat"
start /wait devenv solution.sln
Run Code Online (Sandbox Code Playgroud)

它启动了 GUI,但命令行立即返回而无需等待。

我基本上想要像

call "%VS100COMNTOOLS%\vsvars32.bat"
:START
svn update
cmake 
start /wait devenv solution.sln
GOTO START
Run Code Online (Sandbox Code Playgroud)

甚至可以等待 GUI 关闭吗?

command-line visual-studio-2010

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

BlockingQueue:put()和isEmpty()不能一起工作?

我想有一个SynchronousQueue从一个线程插入元素的位置put(),因此输入被阻塞,直到元素被另一个线程占用.

在另一个线程中,我执行了大量计算,并且不时想要检查元素是否已经可用,并使用它.但似乎isEmpty()总是返回true,即使另一个线程正在等待put()通话.

这怎么可能呢?以下是示例代码:

@Test
public void testQueue() throws InterruptedException {
    final BlockingQueue<Integer> queue = new SynchronousQueue<Integer>();

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {
                if (!queue.isEmpty()) {
                    try {
                        queue.take();
                        System.out.println("taken!");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                // do useful computations here (busy wait)
            }
        }
    });
    t.start();

    queue.put(1234);
    // this point is never reached!
    System.out.println("hello");
}
Run Code Online (Sandbox Code Playgroud)

编辑:既不是isEmpty()也不是peek()工作,必须使用poll().谢谢!

java collections multithreading producer-consumer

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