标签: simplification

简化Java中的分数

我的任务是发展一个理性的阶级.如果500和1000是我的输入,则(½)必须是我的输出.我自己写了一个程序来找到它.

还有另一种找到解决方案的最佳方法,或者我的程序已经是最好的了吗?

public class Rational {

    public static void main(String[] args){

       int n1 = Integer.parseInt(args[0]);
       int n2 = Integer.parseInt(args[1]); 
       int temp1 = n1;
       int temp2 = n2; 

       while (n1 != n2){
         if(n1 > n2)
            n1 = n1 - n2;
         else
            n2 = n2 - n1;
       }      

      int n3 = temp1 / n1 ;
      int n4 = temp2 / n1 ;

      System.out.print("\n Output :\n");

      System.out.print(n3 + "/" + n4 + "\n\n" );
      System.exit(0);
    }  
}
Run Code Online (Sandbox Code Playgroud)

java rational-numbers simplification

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

C标准寻址简化不一致

第§6.5.3.2节"地址和间接操作符"3表示(仅限相关部分):

一元&运算符返回其操作数的地址....如果操作数是一元运算*符的结果,则不会对该运算符和&运算符进行求值,结果就好像两者都被省略,除了对运算符的约束仍然适用且结果不是左值.类似地,如果操作数是[]运算符的结果,&则不会对运算符或*由其暗示的一元[]进行求值,结果就像&删除了[]运算符并将运算符更改为+运算符一样....

这意味着:

#define NUM 10
int tmp[NUM];
int *i = tmp;
printf("%ti\n", (ptrdiff_t) (&*i - i) );
printf("%ti\n", (ptrdiff_t) (&i[NUM] - i) );
Run Code Online (Sandbox Code Playgroud)

应该完全合法,打印0和NUM(10).标准似乎非常清楚,这两种情况都需要进行优化.

但是,它似乎不需要优化以下内容:

struct { int a; short b; } tmp, *s = tmp;
printf("%ti\n", (ptrdiff_t) (&s->b - s) );
Run Code Online (Sandbox Code Playgroud)

这似乎非常不一致.我没有理由认为上面的代码不应该打印sizeof(int)加号(不太可能)填充(可能是4).

简化&->表达式在概念上(IMHO)将是&[]一个简单的地址加偏移量.它甚至是一个在编译时可以确定的偏移量,而不是[]运算符可能的运行时间.

关于为什么这么看似不一致的理由是否存在?

c standards simplification memory-address

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

Visvalingam-Whyatt折线简化算法澄清

我正在尝试实现折线简化算法.原始文章可以在这里找到:http://archive.is/Tzq2.这似乎在概念简单,但我不明白的样本算法(我认为这是措辞很差)伪提供,希望有人能提供一些见解.从文章中我收集到的基本想法是

  1. 计算每个点的有效面积(由一条线上三个连续点之间的三角形组成),并删除那些面积为0的面积
  2. 从最小区域开始,将点的面积与阈值进行比较,如果该区域低于该阈值,则从折线中删除它.
  3. 移动到两个相邻的点,并在它们发生变化时重新计算它们的区域
  4. 返回2,直到阈值以下的所有点区域都被移除

算法如下(从文章中逐字复制):

  • 计算每个点的有效区域删除零区域的所有点,并将它们存储在该区域的单独列表中
  • 重复
    • 找到效率最小的点,并将其称为当前点.如果计算出的面积小于要消除的最后一个点,则使用后者的区域.(这可确保在不消除先前消除的点的情况下无法消除当前点.)
    • 从原始列表中删除当前点,并将其与其关联区域一起添加到新列表中,以便在运行时过滤该行.
    • 重新计算两个相邻点的有效面积(见图1b).
  • 直到
    • 原始线仅包含2个点,即起点和终点.

我对'REPEAT'下第一步中的'if'条款感到困惑......任何人都可以澄清一下吗?

algorithm simplification polyline

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

如何减少任意SVG路径的坐标数,而不会损失太多或任何精度?

我正在网上搜索工具,程序,实用程序,支持库和代码基元,这些基元最近有助于优化SVG的简洁性,空间和优雅,可以链接到Kilobyte SVG Challenge工具部分,但还没有找到好的基元聚焦关于如何减少路径坐标的数量,而不会损失太多 - 或理想的任何 - 精度.

以这个标记增强版的可口可乐标志为例(约7kb,基本上所有的路径数据) - 非常清楚地显示了减少bèziers数量的许多承诺,给出了一些工具来计算数学来提出一个路径使用较少的节点,同时产生基本相同的曲线.

对于更简单的多边形和折线问题(读作"全线路径"),您可以使用Douglas-Peucker或Visvalingam的算法(参见Mike Bostock对后者的优秀d3实现)来简单地删除最不影响路径形状的坐标直到您对满足您需求的尺寸到精度的配合感到满意.

我正在寻找等效的注意事项,其中较大的曲线(或甚至弧形)段可以替代许多这些冗余的中间曲线坐标停止,而无需大量的手动调整.我认为一些矢量图形包(Adobe Illustrator,甚至可能是Inkscape?)可能会提供这些功能(欢迎使用它们的提示!) - 虽然我很想找到可编写脚本的工具,我们可以推荐并提供如何使用的HOWTO命令行,甚至网络应用程序,为人们挤出多余的路径填充材料.

作为参考,Kilobyte SVG Challenge是我最近设立的一个有趣的SVG教育和宣传噱头.关于它的所有非问题主题讨论最好保存在那里,和/或上面链接的github存储库.保持好状况!:)

svg simplification

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

我可以猜出 RDP (Ramer-Douglas-Peucker) 的适当 epsilon 吗?

我有一组时间序列数据,它们在移动应用程序中显示为图表。

为了使图表更清晰,我通过应用Ramer-Douglas-Peucker简化了集合。

如果我将 RDP 应用于 epsilon 太高的小集合,则该集合会变得过于简化。

有什么方法可以评估一组适当的 epsilon 吗?

我应该只使用指定所需点数的算法变体吗?

编辑: 我已经设法计算出,如果我或多或少知道简化后我希望集合包含多少个点,我可以粗略地计算:

epsilon := (totalNumberOfPoints / (3 * desiredNumberOfPoints)) * 2
Run Code Online (Sandbox Code Playgroud)

但我很想学习其他技术。

algorithm simplification

10
推荐指数
0
解决办法
1695
查看次数

线简化算法:Visvalingam vs Douglas-Peucker

我正在尝试实施一个siplification算法.主2种算法我发现是拉默道格拉斯-普克:https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm 和Visvalingam-Whyatt:HTTPS://bost.ocks .org/mike/simplify / 目前我在matlab上运行了一些模拟,以确定更好的需求.

该算法的主要目标是在地图中同化多边形.我的输入是一个多边形\折线和错误epsilon的阈值.

我需要将简化的多边形尽可能地接近原始多边形,并且我没有要求保留的点数的要求.

我在比较这两种算法时遇到困难,因为:RDP的epsilon是距离,而VW的epsilon是一个区域.我需要帮助了解如何比较两种算法.这可以给我少点保持在门槛之内?

algorithm polygon simplification computational-geometry

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

Python:具有点数而不是epsilon的Ramer-Douglas-Peucker(RDP)算法

我想针对RDP算法修改以下python脚本,目的是不使用epsilon,而是选择我想保留在最后的点数:

class DPAlgorithm():

    def distance(self,  a, b):
        return  sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)

    def point_line_distance(self,  point, start, end):
        if (start == end):
            return self.distance(point, start)
        else:
            n = abs(
                (end[0] - start[0]) * (start[1] - point[1]) - (start[0] - point[0]) * (end[1] - start[1])
            )
            d = sqrt(
                (end[0] - start[0]) ** 2 + (end[1] - start[1]) ** 2
            )
            return n / d

    def rdp(self, points, epsilon):
        """
        Reduces a series …
Run Code Online (Sandbox Code Playgroud)

python algorithm simplification computational-geometry

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

最小化布尔表达式NP-Complete?

我知道布尔可满足性是NP-Complete,但它是布尔表达式的最小化/简化,我的意思是以符号形式给出一个给定的表达式,并以符号形式生成一个等价但简化的表达式,NP-Complete?我不确定从可满足性到最小化的减少,但我觉得可能存在.有人有确切消息么?

algorithm complexity-theory np-complete satisfiability simplification

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

如何简化这个非常长的if语句?

如何简化这个if语句?这是一个加号:http: //i.stack.imgur.com/PtHO1.png

如果语句完成,则在x和y坐标处设置块.

for y in range(MAP_HEIGHT):
    for x in range(MAP_WIDTH):
        if (x%5 == 2 or x%5 == 3 or x%5 == 4) and \
            (y%5 == 2 or y%5 == 3 or y%5 == 4) and \
            not(x%5 == 2 and y%5 == 2) and \
            not(x%5 == 4 and y%5 == 2) and \
            not(x%5 == 2 and y%5 == 4) and \
            not(x%5 == 4 and y%5 == 4):
            ...
Run Code Online (Sandbox Code Playgroud)

python graphics if-statement simplification modulus

6
推荐指数
3
解决办法
1676
查看次数

是否有任何简化的 YAML 格式变得普遍?

我喜欢 YAML。

等等,让我备份。我喜欢看起来像这样的 YAML,甚至比 JSON 还要多:

Projects:
  C/C++ Libraries:
  - libyaml       # "C" Fast YAML 1.1
  - Syck          # (dated) "C" YAML 1.0
  - yaml-cpp      # C++ YAML 1.2 implementation
  Ruby:
  - psych         # libyaml wrapper (in Ruby core for 1.9.2)
  - RbYaml        # YAML 1.1 (PyYaml Port)
  - yaml4r        # YAML 1.0, standard library syck binding
  ...
Run Code Online (Sandbox Code Playgroud)

我也喜欢 YAML 锚点和引用,有时希望 JSON 有它们。

但我希望我们大多数人都同意以下内容不是那么容易阅读(我知道这个例子是说教的,但重点是因为它是有效的 YAML,与您合作的人可能会使用此类功能污染您的数据):

!!map {
  ? !!str "sequence"
  : !!seq [ !!str "one", !!str "two" ], …
Run Code Online (Sandbox Code Playgroud)

yaml simplify simplification

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