在"算法简介"一书中,Quicksort一章中描述的快速排序算法不使用Hoare-Partitioning.
任何人都可以通过这种方法优于流行的hoare-partitioning来启发我.或者它只是作者的选择问题?
我正在尝试生成如下所示的序列集,而不是按任何特定顺序生成,但此处显示为降序.请注意,每个序列也会下降,因为我对组合感兴趣,而不是排列.我想将每个序列存储为数组..或者将序列集更好地存储为数组数组,但首先要做的事情.
6
5 1
4 2
4 1 1
3 3
3 2 1
3 1 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
现在我只是专注于生成这些集合,我试图递归地执行它.基本上......这些是所有数字序列,当组合将给出一些总数......在这种情况下6.但请注意当第一个数字是3时,后面的数字集合只是给出总数的序列集合换句话说,6(目标总数)-3(第一个数字)= 3(总共3个的序列集).因此,应该能够递归地执行此操作.
我尝试编码如下(是的,这是我的第一语言,是的,我只学习了大约一个星期所以我确定它全部搞砸了)但到目前为止还没有运气.我想如果我能够让递归的核心工作并将所有对象的值放到屏幕上,那么我可以逐行跟踪它,我想我可以继续前进,但是在逻辑和语法之间,我我站着不动.
我的逻辑是:
然后,循环查看从1开始的序列的下一个(第一)值的可能性,并且显然以最大可能结束,这是'count'本身的值.确定循环中每个值的新增量.
如果delta为0,则完成此操作,否则将确定此新序列,该序列将给出此新增量.可能还需要将新序列附加到当前序列.
i=0
def seq(count)
cvc=Array.new # array to hold the number values
i=i+1 # position index for the array
puts 'i is ' + i.to_s
delta=count
puts ' delta is ' + delta.to_s
for value …Run Code Online (Sandbox Code Playgroud) 我想从Range Partition移动到Range-Interval,但我当前的表上有一个分区,MAXVALUE用于分区的列允许空值:(
例如:说我们有:
create table a (b number)
partition by range (b) (
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (50),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
Run Code Online (Sandbox Code Playgroud)
然后我们填充:
INSERT INTO a(b) VALUES (1);
INSERT INTO a(b) VALUES (11);
INSERT INTO a(b) VALUES (51);
INSERT INTO a(b) VALUES (null);
Run Code Online (Sandbox Code Playgroud)
为了能够移动到间隔,我们需要删除分区MAXVALUE,因此,应将其他值移动到新分区.
51不是问题,我会在哪里创建分区VALUES LESS than 100,但是NULL那些呢?
我正在考虑改变范围内的分区(NVL(b,0)),但我害怕必须重新处理整个表(不可能,真正的表有很多数据).
任何的想法?
这是一个几何问题.
我在两个点A和B之间有一条线,并希望将它分成k个相等的部分.我需要分割A和B之间的线的点的坐标.
任何帮助都非常感谢.
非常感谢!
(这是专业的最佳实践/模式兴趣,而不是家庭工作要求)
INPUT:任何无序序列或生成器项,函数myfilter(item)如果满足过滤条件则返回True
OUTPUT:(filter_true,filter_false)原始类型序列的元组,其包含按原始序列顺序根据过滤器分区的元素.
如果不进行双重过滤,你会如何表达这一点,还是应该使用双重过滤?也许filter和loop/generator/list comprehencion next可以回答?
我是否应该考虑保持类型或只是改变要求给出元组/发电机结果的元组,我不能轻易返回发电机输入发电机,或者我可以吗?(要求是自制的)
这里测试最佳候选人,提供两个流而不是元组
import itertools as it
from sympy.ntheory import isprime as myfilter
mylist = xrange(1000001,1010000,2)
left,right = it.tee((myfilter(x), x) for x in mylist)
filter_true = (x for p,x in left if p)
filter_false = (x for p,x in right if not p)
print 'Hundred primes and non-primes odd numbers'
print '\n'.join( " Prime %i, not prime %i" %
(next(filter_true),next(filter_false))
for i in range(100))
Run Code Online (Sandbox Code Playgroud) 存在包含N个整数的集合S,每个整数具有值1 <= X <= 10 ^ 6.问题是将集合S划分为k个分区.分区的值是其中存在的元素的总和.分区将以这样的方式完成,集合S的总值在k个分区之间公平分配.公平的数学意义也需要定义(例如,目标可以是最小化分区值与集合S的平均值的标准偏差(即,和(S)/ k))
例如,S = {10,15,12,13,30,5},k = 3
一个好的分区是{30},{10,15},{12,13,5}
错误的分区是{30,5},{10,15},{12,13}
第一个问题是在数学上表达一个分区的条件要好于另一个分区.第二个问题是如何解决问题.问题是NP-Hard.有任何启发式吗?
在我试图解决N <=(k*logX)^ 2和K从2到7变化的问题.
================================================== ================================
根据其他相关的SO问题,评估分布有两个合理的功能:
a)使用最大值最小化分区的值.
再想一想,这不是一个好的指标.考虑一组{100,40,40}被分成三个子集.该度量标准不区分以下两个分布,即使一个明显优于另一个.
分配1:{100},{40},{40}和分配2:{100},{40,40},{}
b)最小化给定分区中任何两个值的差异的最大值,即最小化max | AB | 任何A,B
我认为我对quicksort的工作方式有了很好的理解,直到我在http://code.google.com/edu/algorithms/index.html上观看了视频,其中Jon Bentley介绍了他的"漂亮的快速排序代码",如下所示:
void quicksort(int l, int u){
int i, m;
if(l >= u) return;
m = l;
for(i = l+1; i<= u; i++)
if(x[i] < x[l])
swap(++m, i); //this is where I'm lost. Why the heck does it preincrement?
swap(l, m);
quicksort(l, m-1);
quicksort(m+1, u);
}
Run Code Online (Sandbox Code Playgroud)
算法混淆的算法的另一部分是FOR循环后的最终交换.为什么这是必要的?让我们假设数组已经按顺序排列.如果是这样,则自x [i]> x [l]以来不会发生交换.最后,我们用m交换l.这搞砸了订单.
我错过了什么吗?
谢谢.
使用caret包,在创建数据分区75%培训和25%测试时,我们使用:
inTrain<- createDataPartition(y=spam$type,p=0.75, list=FALSE)
Run Code Online (Sandbox Code Playgroud)
注意:数据集已命名spam,目标变量已命名type
我的问题是,包括y=spam$type论证的目的是什么?
创建数据分区的目的不是简单地根据培训与测试所需的比例拆分整个数据集吗?为什么需要在代码中包含该参数?
我想根据变量将单个数组转换为一组较小的数组。所以,0,1,2,3,4,5,6,7,8,9将成为0,1,2,3,4,5,6,7,8,9当大小为3。
我目前的做法:
$ids=@(0,1,2,3,4,5,6,7,8,9)
$size=3
0..[math]::Round($ids.count/$size) | % {
# slice first elements
$x = $ids[0..($size-1)]
# redefine array w/ remaining values
$ids = $ids[$size..$ids.Length]
# return elements (as an array, which isn't happening)
$x
} | % { "IDS: $($_ -Join ",")" }
Run Code Online (Sandbox Code Playgroud)
产生:
IDS: 0
IDS: 1
IDS: 2
IDS: 3
IDS: 4
IDS: 5
IDS: 6
IDS: 7
IDS: 8
IDS: 9
Run Code Online (Sandbox Code Playgroud)
我希望它是:
IDS: 0,1,2
IDS: 3,4,5
IDS: …Run Code Online (Sandbox Code Playgroud) 我的头脑被困在为我的问题寻找算法.
假设我有N数字(比方说4)我想拥有所有X分区(X = N/2)
例:
{1,2,3,4}的2-分区是:(1,2)(1,3)(1,4)(2,3)(2,4)(3,4)[简称:所有组合]
我不知道如何生成这些组合.如果你有人有一个想法(我不在乎什么语言.伪代码是完全足够的.我不在乎它是迭代还是显式).
最好的问候,Bigbohne