标签: packing

将点放入具有最大最小距离的正方形的算法

我坚持这个:有一个正方形.将n个点放入此正方形,因此最小距离(不一定是平均距离)是最高的.

我正在寻找一种能够在给定计数的情况下生成所有点的坐标的算法.

n = 4; 5; 6的示例结果:

n = 4; 5; 6的示例结果http://i40.tinypic.com/ohrb44.png

请不要提及基于计算能力的东西,例如尝试很多组合,然后挑剔正确的和类似的想法.

algorithm geometry packing

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

Java将4个字节转换为int

我想知道这里记录的解决方案是否仍然是解决方案还是有其他方式从4个字节获取一个int?

谢谢.

编辑:我从套接字.read获取byte []

编辑:int recvMsgSize = in.read(Data, 0, BufferSize);如果recvMsgSize为-1我知道连接已被删除.

我在使用DataInputStream而不是InputStream时如何检测到这一点?

谢谢.

编辑:对于接受正确答案的yoyo道歉.但是在mihi更新了最终响应之后,看起来该方法是可靠的并且减少了扩展编码,并且在我看来是最佳实践.

java casting packing

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

在任意边界内打包任意多边形

我想知道是否有人能指出我最适合我特定多边形包装问题的算法/启发式算法.我给了一个多边形作为边界(凸面或凹面也可能包含孔)和一个"填充"多边形(也可能是凸面或凹面,不包含孔)我需要用指定的数字填充边界多边形填充多边形.(我在2D工作).

我发现的许多多边形填充启发式假设边界和/或填充多边形将是矩形的,并且填充多边形将具有不同的大小.在我的例子中,填充多边形可能是非矩形的,但都是完全相同的.

也许这是一种特殊类型的包装问题?如果有人对这种类型的多边形包装有一个定义,我很乐意google,但到目前为止,我还没有发现任何类似的东西都很有用.

谢谢.

algorithm heuristics polygon packing

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

如何在C#中创建类,可以转换为DateTime?

如何创建可以转换为DateTime的类.但是,当它打包时,我需要投我的课.例如:

object date1 = new MyDateTime();
DateTime date2 = (DateTime)date1;
Run Code Online (Sandbox Code Playgroud)

我需要直接这个工作的例子.

我知道怎么做,但我的方式将无需包装.我不确定是否有办法做到这一点.

请帮忙.

PS.我需要直接将对象转换为DateTime.因此,MyDateTime必须先包装好.显式效果很好,但是如果你有打包对象则没有用.它必须使用普通的铸造像

(DateTime) (object) MyDateTime
Run Code Online (Sandbox Code Playgroud)

c# datetime packing

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

带约束的矩形包装

我想打包一组矩形(例子):

在此输入图像描述

因此总高度尽可能低,矩形必须在它们开始的同一列中结束. 矩形允许彼此"移动"以达到最终状态,只要它们不' t在末尾相交.

我们当前的算法是处理从最大高度到最小高度的矩形,并将它们放在可用的最低y位置.有更优化的算法吗?

编辑:我不一定需要最优解决方案,任何生成比当前解决方案更好的解决方案的算法都很有趣.此外,矩形的数量约为50.

algorithm optimization packing mathematical-optimization

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

在Java中将比特打包成byte []并将其读回来的最有效方法是什么?

我目前使用这两个函数来打包和读取字节数组中的位.想知道是否有人有更好的想法或更快的方法吗?

通过更多优化编辑程序并提出一些计算.目前100mil的Put and Get大约需要12秒而不是16秒.

如果有人正在使用当前代码,请确保传入Put的值是正数,因为它期望无符号数字下降.如果有兴趣,我可以提出签名和未签名的版本.

class BitData
{
    static void Put(byte Data[], final int BitOffset, int NumBits, final int Value)
    {
        final long valLong=(Value&((1L<<NumBits)-1L));
        int posByte=BitOffset>>3;
        int posBit=BitOffset&7;
        int valByte;
        int ModifyBits;

        long lValue;
        int LeftShift;
        ModifyBits=8-posBit;
        if(NumBits<ModifyBits) ModifyBits=NumBits;
        LeftShift=(8-posBit-ModifyBits);
        while(true)
        {
            valByte = Data[posByte];
            if(ModifyBits==8)
            {
                lValue=valLong<<(32-NumBits)>>(24);
                Data[posByte]=(byte)lValue;
            }
            else
            {   
                lValue=valLong<<(32-NumBits)>>(32-ModifyBits)<<LeftShift;
                Data[posByte]=(byte)((valByte & ~(((1<<ModifyBits)-1) << LeftShift)) | lValue);
            }
            NumBits-=ModifyBits;
            if(NumBits==0) break;
            posByte++;          
            ModifyBits=8;
            if(NumBits<ModifyBits) 
            {
                ModifyBits=NumBits;
                LeftShift=(8-ModifyBits);
            }
        }
    }

    static int GetInt(byte Data[], final int BitOffset, …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation packing bit

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

在rtree中的填充算法

大家好我明白,如果rtree是用boost中的范围值创建的,那么它将使用打包算法.我需要一个使用打包算法的rtree示例.这是我使用二次算法的代码

    using  point = bg::model::point < int, 2, bg::cs::cartesian >;
    using  pointI = std::pair<point, std::size_t>;
 vector<point> contourCenters // has some value
bgi::rtree< pointI, bgi::quadratic<16> > rtree;
vector< pointI > cloud;

for (size_t i = 0; i < contourCenters.size(); ++i)
{
    int x = contourCenters[i].get < 0 >();
    int y = contourCenters[i].get < 1 >();

    cout << "Contour Centers: (" << x << "," << y << ")";
    cloud.push_back(mp(x, y, i));
    rtree.insert(make_pair(contourCenters[i], i));
}
Run Code Online (Sandbox Code Playgroud)

我想用打包算法创建rtree,因为它似乎是boost中最快的.请指导我如何在boost中使用打包算法创建rtree.

c++ algorithm boost packing

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

快速块放置算法,需要建议吗?

我需要模拟Fluxbox窗口管理器的窗口放置策略.

作为一个粗略的指南,可视化随机大小的窗口一次一个地填满屏幕,其中每个窗口的粗略大小导致屏幕上平均80个窗口,而没有任何窗口与另一个窗口重叠.

如果您的系统上安装了Fluxbox和Xterm,您可以尝试使用xwinmidiarptoy BASH脚本来查看我想要发生的事情的粗略原型.请参阅我写过的xwinmidiarptoy.txt说明,解释它的作用以及如何使用它.

重要的是要注意窗口将关闭,并且关闭先前占用的窗口的空间再次可用于放置新窗口.

该算法需要是一个在线算法处理数据"以串行方式逐个处理,即按照输入被提供给算法的顺序,而不需要从一开始就提供整个输入."

Fluxbox窗口放置策略有三个我想模拟的二元选项:

  • Windows构建水平行垂直列(可能)

  • Windows从左到右从右到左放置

  • Windows从上到下从下到上放置

目标算法与窗口放置算法之间的差异

坐标单位不是像素.将放置块的网格将是128 x 128个单位.此外,放置区域可以通过放置在网格内的边界区域进一步收缩.

为什么算法有问题?

它需要在音频应用程序中运行到实时线程的最后期限.

此刻我只关心获得快速算法,不关心实时线程的含义以及编程带来的所有障碍.

虽然算法永远不会放置一个与另一个重叠的窗口,但是用户将能够放置和移动某些类型的块,将存在重叠的窗口.用于存储窗口和/或空闲空间的数据结构需要能够处理这种重叠.

到目前为止,我有两个选择,我已经建立了松散的原型:

1)Fluxbox放置算法的一个端口到我的代码中.

问题是,当我尝试使用该算法放置256块的最坏情况时,客户端(我的程序)被踢出音频服务器(JACK).该算法在放置第256个窗口时对已经放置的块列表执行超过14000次完整(线性)扫描.

为了演示这一点,我创建了一个名为text_boxer-0.0.2.tar.bz2的程序,该程序将文本文件作为输入并将其排列在ASCII框中.问题make来构建它.有点不友好,使用--help(或任何其他无效选项)的命令行选项列表.您必须使用该选项指定文本文件.

2)我的替代方法.

仅部分实现,该方法对矩形空闲未使用空间的每个区域使用数据结构(窗口列表可以完全分离,并且不需要用于测试该算法).数据结构充当双向链表中的节点(具有排序插入),并且包含左上角的坐标以及宽度和高度.

此外,每个块数据结构还包含四个链接,这四个链接连接到四个边中的每一个上的每个紧邻(触摸)块.

重要规则:每个块每侧只能触摸一个块.这是一种特定于算法存储空闲未使用空间的方法的规则,并且不会影响实际窗口可能相互接触的数量.

这种方法的问题是,它非常复杂.我已经实现了直接的情况,其中1)从块的一个角去除空间,2)分割相邻的块以便遵守重要的规则.

不太直接的情况,其中要移除的空间只能在一列或一排框中找到,只是部分实现 - 如果要移除的一个块完全适合宽度(即列)或高度(即然后出现问题.甚至没有提到这个事实,它只检查一个框宽的列,并排一个框高.

我已经用C语言实现了这个算法 - 我正在使用这个项目的语言(我几年没有使用过C++,在把注意力都集中在C开发之后使用它很不舒服,这是一个爱好).实现是700多行代码(包括大量空行,支撑线,注释等).该实现仅适用于水平行+左右+上下放置策略.

所以我要么添加一些方法来使这些+700行代码适用于其他7个放置策略选项,或者我将不得不为其他7个选项复制那些+700行代码.这些都不具吸引力,第一,因为现有代码足够复杂,第二,因为膨胀.

由于缺少功能,该算法甚至不能在实时最坏情况下使用它,因此我仍然不知道它实际上是否比第一种方法更好或更差.

该算法的C实现的当前状态是freespace.c.我用它gcc -O0 -ggdb freespace.c来构建,并以xterm大小运行它至少至少124 x 60个字符.

那里还有什么?

我撇去并打折: …

algorithm packing bisection

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

以最佳方式将矩形装配在一起

我想知道是否有人知道任何适合将N个未知大小的矩形装配到最小可能包含矩形中的算法.

最佳,我的意思是减少生成的包含矩形中剩余的空白量.

我想用它来从一系列图像中生成css sprites.

非常感谢,

伊恩

algorithm packing bin-packing

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

组合独立集/汉明距离的算法/近似

输入:图G输出:几个独立的集合,因此节点对所有独立集的成员资格是唯一的.因此,节点与其自己的集合中的任何节点都没有连接.这是一个示例路径.

由于在这里要求澄清另一个改写:

将给定的图形划分为多个集合

  1. 我可以通过集合中的成员资格告诉所有其他节点节点,例如,如果节点i仅存在于集合A中,则集合A中不应存在其他节点

    如果节点j出现在集合A和B中,则集合A和B中不应存在其他节点.如果节点的成员资格由位模式编码,则这些位模式的汉明距离至少为1

  2. 如果图中有两个节点相邻,则它们不应出现在同一个集合中,因此是一个独立的集合

示例:B没有相邻节点D => A,A => D.

解:

  1. AB/
  2. / BD

A具有位模式10并且其集合中没有相邻节点.B有位模式11,没有相邻节点,D有01,因此所有节点的汉明距离至少为1,没有相邻节点=>正确

错了,因为D和A连接在一起:

  1. ADB
  2. / D B

A在其集合中具有位模式10和D,它们是相邻的.B具有位模式11而没有相邻节点,D具有11和B一样,因此在该解决方案中存在两个错误,因此不被接受.

当然,随着图表中节点数量的增加,这应该扩展到更多集合,因为您至少需要log(n)集合.

我已经在MAX-SAT中编写了一个转换,为此使用了一个sat-solver.但条款的数量只是很大.更直接的方法会很好.到目前为止,我有一个近似值,但我想要一个精确的解决方案或至少更好的近似.

我尝试过一种方法,我使用粒子群从任意解决方案优化到更好的解决方案.然而,运行时间非常糟糕,结果远非如此.我正在寻找动态算法或其他东西,但我无法理解如何划分和征服这个问题.

algorithm set packing np-complete hamming-distance

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