- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个程序(分形)以交错的顺序绘制线条。最初,给定要绘制的 H
行,它确定帧数 N
,并绘制每 N
帧,然后每 N +1
第帧等
例如,如果 H = 10
和 N = 3
,它会按顺序绘制它们:
0, 3, 6, 9,
1, 4, 7,
2, 5, 8.
但是我不喜欢 strip 逐渐变厚的方式,在很长一段时间内留下大面积未绘制的区域。因此,该方法得到增强,以递归方式在每个组中绘制中点线,而不是紧接着的后续线,例如:
0, (32) # S (step size) = 32
8, (24) # S = 16
4, (12) # S = 8
2, 6, (10) # S = 4
1, 3, 5, 7, 9. # S = 2
(括号内的数字超出范围,没有画出来。)算法很简单:
Set S to a power of 2 greater than N*2, set F = 0.
While S > 1:
Draw frame F.
Set F = F + S.
If F >= H, then set S = S / 2; set F = S / 2.
当在最后一个步长上绘制奇数帧时,它们以简单的顺序绘制,就像初始(烦人的)方法一样。与每四帧相同,等等。它并没有那么糟糕,因为已经绘制了一些中间帧。
但是相同的排列可以递归地应用于每个步长的元素。在上面的示例中,最后一行将更改为:
1, # the 0th element, S' = 16
9, # 4th, S' = 8
5, # 2nd, S' = 4
3, 7. # 1st and 3rd, S' = 2
前面几行元素太少递归生效。但如果 N
足够大,某些行可能需要多层递归。任何具有 3 个或更多对应元素的步长都可以递归置换。
问题 1.N
元素上的这种排列是否有一个通用名称,我可以用它来查找其他 Material ?我也对可能存在的任何类似示例感兴趣。如果我是第一个想要这样做的人,我会感到很惊讶。
问题 2. 我可以使用一些技术来计算它吗?我在 C 语言中工作,但现阶段我对算法级别更感兴趣;我很高兴阅读其他语言的代码(在合理范围内)。
我还没有解决它的实现问题。我希望我会首先预先计算排列(与上面的前一种方法的算法相反)。但我也很感兴趣是否有一种简单的方法来绘制下一帧而无需预先计算它,其复杂性与之前的方法相似。
最佳答案
听起来好像您正在尝试构建一维 low-discrepancy sequences .您的排列可以通过反转索引的二进制表示来计算。
def rev(num_bits, i):
j = 0
for k in xrange(num_bits):
j = (j << 1) | (i & 1)
i >>= 1
return j
示例用法:
>>> [rev(4,i) for i in xrange(16)]
[0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]
适用于一般 n 的变体:
def rev(n, i):
j = 0
while n >= 2:
m = i & 1
if m:
j += (n + 1) >> 1
n = (n + 1 - m) >> 1
i >>= 1
return j
>>> [rev(10,i) for i in xrange(10)]
[0, 5, 3, 8, 2, 7, 4, 9, 1, 6]
关于algorithm - 递归交错排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176743/
我需要在给定的列表上生成排列。我设法这样做 let rec Permute (final, arr) = if List.length arr > 0 then for x i
我正在尝试运行我的代码,以便它打印循环排列,尽管我目前只能让它执行第一个排列。它正确运行到我标记的点,但我看不出出了什么问题。我认为 while 循环中没有中断,但我不确定。确实需要一些帮助。 pac
我正在尝试计算不包含连续字母的排列数。我的代码通过了像“aabb”(答案:8)和“aab”(答案:2)这样的测试,但没有通过像“abcdefa”这样的情况(我的答案:2520;正确答案:3600)。这
比赛在这 B.排列 前言: 笛卡尔树上 dp?这名字很妙啊,但其实不需要笛卡尔树,只不过利用了笛卡尔树的定义 一个性质:我们设一个区间 \([l,r]\) 中的最大值的位置为 \(pos\),
我正在尝试使用 dplyr 的 arrange 根据条件对字符串进行排序。我想在一列上排列,但如果第二列等于一个值,则按升序排列,如果第二列等于另一个值,则按降序排列。 我发现了几个类似的问题(其中一
在 R 中,我使用 dplyr更具体地说 arrange() . 不知何故 arrange功能没有按预期工作。 在下面的示例中,我首先存储列的名称,然后将此变量作为参数传递给名为“my_functio
以下是我的 main.qml : Window { id: window visible: true width: 800 height: 480 title:
很难用谷歌搜索这个问题,因为我不确定这些概念叫什么,并且所有“两个数组/组的组合”SO 帖子都没有给我我期望的输出。 数组示例: var array1 = ['Bob', 'Tina']; var a
实现以下目标的最佳方法是什么?我有两个列表: val l1 = List("a", "b") val l2 = List(1, 2) 我想生成这个: List ( List(('a', 1)
我知道互联网上有很多针对我的具体问题的解决方案,但我一直在尝试以特定的方式解决它,但它不起作用,我真的无法理解出了什么问题。就我而言,我只想打印排列。这是我的代码: a = "abc"; functi
我有这样的代码来创建排列: --unique permutation perm :: [t] -> [[t]] perm [] = [[]] perm (x:xs) = [(y:zs) | (y,ys
有没有比使用基本公式 n!/(n-r)! 更好的方法?就像我们对 nCr(组合) nCr = (n-l)Cr + (n-1)C(r-1) 一样? 最佳答案 这样怎么样:nPr = (n−1)Pr +
此问答的动机是 How to build permutation with some conditions in R . 到目前为止,已经有一些很好的 R 软件包,例如 RcppAlgos 和 arr
我正在修改一本书中的排列示例。以下代码按预期工作。 perms([]) -> [[]]; perms(L) -> [[H|T] || H []; 它返回一个空列表。当我替换时,我得到了这个。
大约一周前,我问了一个关于帮助我解决这个问题的问题 Java permutations ,打印排列方法有问题。我已经整理了我的代码,并有一个现在可以工作的工作示例,尽管如果 5 位于数组中的第五个位置
我有一个包含重复元素的列表,即orig = [1,1,1,2,2,3]。 我想创建一个derangement b = f(orig),使得 b 中的每个位置值都与 orig 中的值不同: b[i] !
我想生成一个 array a 的排列而且我不想使用实用功能,例如 java.util.Collections() . 排列应该是随机的,并且每个排列都应该有可能发生 - 但不需要均等分布的概率。 以下
我有一个作业:用户输入一个字符串,例如 ABCD,程序必须给出所有排列。我不希望整个代码只是一个提示。这是我到目前为止在他们那里得到的,我没有得到任何实现。 以ABCD为例: 在本例中获取字符串长度的
我目前正在编写一个使用 itertools 的程序,其中的一部分似乎无法正常运行。我希望确定排列函数输出列表长度的输入等于它生成输出的列表长度。换句话说,我有 import itertools b =
我有一个列表 x=[1,2,3,4,5] 并且想查看这个列表的不同排列,一次取两个数字。 x=[1,2,3,4,5] from itertools import permutations y=list
我是一名优秀的程序员,十分优秀!