标签: pseudocode

如何在更高维度的超球面上均匀分布点?

我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。

更加具体:

  • 给定多个点N和多个维D(其中D> 1,N> 1)
  • 每个点到原点的距离必须为1
  • 两点之间的最小距离应尽可能大
  • 每个点到它最近的邻居的距离不必对于每个点都相同(实际上,除非点的数量形成柏拉图式实体的顶点,或者如果N <= D,则不可能相同。 )。

我对以下内容不感兴趣:

  • 在超球面上创建均匀的随机分布,因为我希望任意两点之间的最小距离尽可能大而不是随机分布。
  • 粒子排斥模拟类型的方法,因为它们难以实现并且需要花费很长的时间才能运行较大的N(理想情况下,该方法应该是确定性的,并且以O(n)为单位)。

满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。

斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。

此答案中,有一个针对3个维度的python实现,可生成以下内容:

在此处输入图片说明

我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。

不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。

我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)

在此处输入图片说明

我遇到的上述困难:

  • 如何解析用于?n的反函数?
  • 给出的示例是d = 3的。如何为任意d生成公式?

在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。

为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。

另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。

如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。

math geometry pseudocode

18
推荐指数
2
解决办法
464
查看次数

伪代码翻译?

像你们这些人一样,我经常用几种语言写作.当涉及到规划的东西,(甚至回答一些SO问题)时,我实际上是用一些未指明的混合语言来思考和写作.虽然我曾经被教导要做到这一点使用流程图或UML类图,现在回想起来,我觉得"我的"伪语言具有的成分C,Python,Java,bash,Matlab,perl,Basic.我似乎无意识地选择了最适合表达概念/算法的成语.

常见的习语可能包括范围类似Java的括号,pythonic列表推导或缩进,继承C++,C#-style lambdas,类似matlab的切片和矩阵运算.

我注意到,人们很容易认识到我正在试图做什么,并且人们很容易智能地翻译成其他语言.当然,这一步涉及考虑角落案例,以及每种语言特殊行为的时刻.

但在现实中,大多数这种语言的交流关键字和库函数通常表现相同的一个子集-数学函数,类型名称,while/ for/ if等显然,我不得不像排除口齿不清,APL衍生许多"奇"的语言,但...

所以我的问题是,

  1. 是否已存在识别文本文件编程语言的代码?(当然,这必须是比eclipse的语法树更简单的任务,或者比谷歌翻译的语言猜测功能,对吧?)事实上,SO语法荧光笔是否做了这样的事情?

  2. 理论上讲,创建单个解释器或编译器是否可以识别您在任何时刻使用的语言习惯用语(可能是"智能地")执行或转换为可运行的表单.并标记我的语法在行为方面不明确的极端情况.我看到的直接困难包括:知道何时在依赖于缩进和依赖于支撑的模式之间切换,识别有趣的运算符(如*pointervs *kwargs)以及知道何时使用列表与类似数组的表示.

  3. 是否存在可以管理这种灵活口译的语言或口译?

  4. 我是否错过了明显的障碍?

编辑

谢谢大家的回答和想法.我打算写一个基于约束的启发式翻译可能,可能,"解决"代码的本意并转化为真正的Python代码.它将注意到来自许多常用语言的关键词,并将使用句法线索来消除人类意图的歧义 - 如间距,括号,可选的帮助词,let或者then,变量以前使用的上下文等,以及常见约定的知识(如资本名称,我迭代,和变量/方法例如包含单词的命名的一些简单的有限的了解get,asynchronous,count,last,previous,my等等).在真正的伪代码中,变量命名与操作本身一样丰富!

使用这些线索,它将创建关于每个操作的实现的假设(如基于0/1的索引,何时应该捕获或忽略异常,什么变量应该是const/global/local,从哪里开始和结束执行,以及什么位应该在单独的线程中,注意数字单位匹配/需要转换时).每个假设都具有给定的确定性 - 程序将列出每个语句的假设,因为它哄骗你写入可执行文件的内容!

对于每个假设,如果您不喜欢初始解释,您可以"澄清"您的代码.图书馆问题非常有趣.我的翻译器就像一些IDE一样,将读取所有模块中可用的所有定义,使用一些关于哪些类/方法最常使用和在什么情况下使用的统计数据,并且只是猜测!(给程序添加一个注释,说明为什么会这样猜测......)我想它应该尝试执行所有操作,并警告你不喜欢它.它应该允许任何内容,但是如果你是模棱两可的,请让你知道几种替代解释是什么.

它肯定还需要一段时间才能管理像@Albin Sunnanbo这样不寻常的ImportantCustomer例子.但是我会告诉你我是怎么过的!

language-agnostic algorithm interpreter artificial-intelligence pseudocode

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

在单词中找到最短的重复循环?

我即将编写一个函数,它将返回一个最短的一组字母,最终会创建给定的单词.

例如字abkebabkebabkeb通过重复创建abkeb字.我想知道,如何有效地分析输入词,以获得创建输入词的最短字符周期.

language-agnostic algorithm pseudocode

17
推荐指数
2
解决办法
4925
查看次数

SHA 256 pseuedocode?

我一直在努力研究SHA-256的工作原理.我一直在为其他算法做的一件事是我已经为算法制定了一种逐步的伪代码函数.

我试过为SHA256做同样的事情,但到目前为止我遇到了很多麻烦.

我试图弄清楚维基百科图如何工作,但除了解释函数的文本部分,我不确定我是否正确.

这是我到目前为止所拥有的:

Input is an array 8 items long where each item is 32 bits.
Output is an array 8 items long where each item is 32 bits.
Calculate all the function boxes and store those values. 
|I'll refer to them by function name
Store input, right shifted by 32 bits, into output. 
| At this point, in the out array, E is the wrong value and A is empty
Store the function boxes.
| now we need …
Run Code Online (Sandbox Code Playgroud)

cryptography pseudocode sha sha256

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

伪代码编程过程与测试驱动开发

对于那些没有阅读过代码完成2的人来说,伪代码编程过程基本上是一种设计例程的方法,首先用简单的英语描述它,然后逐步修改为更详细的伪代码,最后编写代码.这样做的主要好处是通过自上而下而不是自下而上构建系统来帮助您保持正确的抽象级别,从而在不同的层中构建一个干净的API.我发现TDD在这方面效果较差,因为它过于注重做最低限度的测试以通过并鼓励一点点前期设计.我还发现,必须为不稳定的代码(不断重构的代码)维护一套单元测试是非常困难的,因为通常情况下你需要对例程进行十几次单元测试,只需要一次或两次.当您进行重构时 - 例如更改方法签名 - 您所做的大部分工作是更新测试而不是更新prod代码.在组件的代码稳定了一点之后,我更喜欢添加单元测试.

我的问题是 - 那些尝试过两种方法的人,你更喜欢哪种方法?

tdd ppp pseudocode

16
推荐指数
2
解决办法
2545
查看次数

Java平衡表达式检查{[()]}

我试图创建一个程序,将一个字符串作为参数进入其构造函数.我需要一个方法来检查字符串是否是一个平衡的括号表达式.它需要处理({[]})每个open需要与其相应的右括号进行平衡.例如,用户可以输入[({})],这将是平衡的,而{}将是不平衡的.这不需要处理字母或数字.我需要使用堆栈来执行此操作.

我得到了这个伪代码,但无法想象如何在java中实现它.任何建议都会很棒.伪代码

更新 - 抱歉忘了发布我到目前为止的内容.这一切搞砸了,因为起初我试图使用char然后我尝试了一个数组..我不确定去哪里.

import java.util.*;

public class Expression
{
  Scanner in = new Scanner(System.in);
  Stack<Integer> stack = new Stack<Integer>();



  public boolean check()
  {
    System.out.println("Please enter your expression.");
    String newExp = in.next();
    String[] exp = new String[newExp];
    for (int i = 0; i < size; i++)
    { 


      char ch = exp.charAt(i);
      if (ch == '(' || ch == '[' || ch == '{')
        stack.push(i);
      else if (ch == ')'|| ch == ']' || ch == '}')
      {
        //nothing to …
Run Code Online (Sandbox Code Playgroud)

java stack pseudocode

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

用C++创建正弦查找表

如何在C++中重写以下伪代码?

real array sine_table[-1000..1000]
    for x from -1000 to 1000
        sine_table[x] := sine(pi * x / 1000)
Run Code Online (Sandbox Code Playgroud)

我需要创建一个sine_table查找表.

c++ lookup trigonometry pseudocode

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

采访拼图:跳跃游戏

跳跃游戏:给定一个数组,从第一个元素开始,通过跳跃到达最后一个元素.跳转长度最多可以是数组中当前位置的值.最佳结果是当您以最小跳跃次数达到目标时.

什么是找到最佳结果的算法?

一个例子:给定数组A = {2,3,1,1,4}到达结尾的可能方式(索引列表)是

  1. 0,2,3,4(跳2到索引2,然后跳1到索引3然后1到索引4)
  2. 0,1,4(跳转1到索引1,然后跳转到索引4)

由于第二种解决方案只有2次跳跃,因此是最佳结果.

algorithm pseudocode

15
推荐指数
3
解决办法
7799
查看次数

如何有效地找到特定尺寸的开放矩形?

背景

我有一个矩形区域分为正方形(这是我正在制作的游戏).我在我的代码中将其表示为一个简单的二维boolean数组:

  ????????????????
  ?  ?  ?  ?  ?  ? X = X-value, also increasing width
  ???????????????? Y = Y-value, also increasing length
  ?  ?  ?  ?  ?  ?
  ????????????????
  ?  ?  ?  ?  ?  ?
  ????????????????
  ?  ?  ?  ?  ?  ?
  ????????????????
^ ?  ?  ?  ?  ?  ?
Y ????????????????
   X >
Run Code Online (Sandbox Code Playgroud)

一些正方形可以被建筑物等矩形占用,就像这个输入(**=拍摄):

????????????????
?**?**?  ?  ?  ? 3 taken rectangles
????????????????
?**?**?**?**?  ?
????????????????
?  ?  ?**?**?  ?
????????????????
?  ?  ?**?**?  ? …
Run Code Online (Sandbox Code Playgroud)

arrays algorithm performance pseudocode

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

最大堆中的第K个最大元素

我想提出一些方法来解决以下问题:

给定表示为数组的max-heap,返回第k个最大元素而不修改堆.我被要求在线性时间内完成,但被告知可以在日志时间内完成.

我想到了一个解决方案:

使用第二个最大堆并将其填入k或k + 1值(宽度优先遍历到原始值)然后弹出k个元素并获得所需的值.我想这应该是O(N + logN)= O(N)

是否有更好的解决方案,也许是在O(logN)时间?

algorithm heap pseudocode data-structures

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