标签: sequence

是否有可能与F#中的分解序列匹配?

我似乎记得F#的旧版本允许在匹配序列时进行结构分解,就像列表一样.有没有办法在保持序列延迟的同时使用列表语法?我希望避免大量调用Seq.head和Seq.skip 1.

我希望有类似的东西:

let decomposable (xs:seq<'a>) =
   match xs with
   | h :: t -> true
   | _ -> false
seq{ 1..100 } |> decomposable
Run Code Online (Sandbox Code Playgroud)

但这仅处理列表并在使用序列时给出类型错误.当使用List.of_seq时,它似乎会评估序列中的所有元素,即使它是无限的.

f# list sequence pattern-matching lazy-evaluation

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

找到三个号码只出现一次

在长度为n的序列中,其中n = 2k + 3,即有k个唯一数字出现两次,并且三个数字仅出现一次.

问题是:如何找到仅出现一次的三个唯一数字?

例如,在顺序1 1 2 6 3 6 5 7 7中,三个唯一数字是2 3 5.

注意:3 <= n <1e6,数字范围为1到2e9

内存限制:1000KB,这意味着我们无法存储整个序列.

方法我试过(内存限制超过)?

我初始化一个树,当读入一个数字时,我尝试将其从树中删除,如果remove返回false(未找到),我将它添加到树中.最后,树有三个数字.它工作,但内存限制超过.

我知道如何使用位操作找到一个或两个这样的数字.所以我想知道是否

我们可以找到三个使用相同的方法(或一些类似的方法)?

找到一个/两个数字的方法只出现一次:

如果只有一个数字出现一次,我们可以对序列应用XOR来找到它.

如果有两个,我们可以先对序列应用XOR,然后将序列分成2个部分,结果为1,然后再将XOR应用于2个部分,我们将找到答案.

algorithm bit-manipulation sequence

16
推荐指数
4
解决办法
2249
查看次数

找分钟.序列的"加入"操作

比方说,我们有一个列表/正整数数组x1,x2,...,xn.我们可以对这个序列进行连接操作,这意味着我们可以用一个元素替换两个彼此相邻的元素,这是这些元素的总和.例如:

- > array/list:[1; 2; 3; 4; 5; 6]

  • 我们可以加入 2和3,并用5替换它们;
  • 我们可以加入 5和6,并用11替换它们;
  • 我们不能 加入 2和4;
  • 我们不能 加入 1和3等

主要问题是找到给定序列的最小连接操作,之后该序列将按递增顺序排序.

注:空和一个元素序列在增加顺序排序.

基本示例:

  • 对于[4; 6; 5; 3; 9]解决方案是1(我们加入 5和3)

  • 对于[1; 3; 6; 5]解决方案也是1(我们加入 6和5)

我正在寻找的是一种解决这个问题的算法.它可以是伪代码,C,C++,PHP,OCaml或类似的(我的意思是:如果你用其中一种语言编写解决方案,我会理解解决方案).

sorting algorithm sequence

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

可选择采用序列中的第一项

我需要一个类似的函数Seq.head,但是None当序列为空时返回而不是抛出异常,即seq<'T> -> 'T option.

有很多方法可以做到这一点.这里有几个:

let items = Seq.init 10 id
let a = Seq.tryFind (fun _ -> true) items
let b = Seq.tryPick Some items
let c = if Seq.isEmpty items then None else Some (Seq.head items)
let d = 
  use e = items.GetEnumerator()
  if e.MoveNext() then Some e.Current
  else None
Run Code Online (Sandbox Code Playgroud)

b是我使用的那个.两个问题:

  1. 是否有一种特别惯用的方法呢?
  2. 由于没有内置Seq.tryHead函数,这是否表明这不是必需的,是不常见的,或者在没有函数的情况下更好地实现?

UPDATE

tryHead已添加到F#4.0的标准库中.

f# idioms sequence

16
推荐指数
1
解决办法
4412
查看次数

Hibernate架构参数在@SequenceGenerator注释中不起作用

我有以下代码:

@Entity
@Table(name = "my_table", schema = "my_schema")
@SequenceGenerator(name = "my_table_id_seq", sequenceName = "my_table_id_seq", 
                   schema = "my_schema")
public class MyClass {
    @Id
    @GeneratedValue(generator = "my_table_id_seq", 
                    strategy = GenerationType.SEQUENCE)
    private int id;

}
Run Code Online (Sandbox Code Playgroud)

数据库:Postgresql 8.4,Hibernate注释3.5.0-最终版.

保存MyClass的对象时,它会生成以下SQL查询:

select nextval('my_table_id_seq')
Run Code Online (Sandbox Code Playgroud)

因此没有模式前缀,因此无法找到序列.当我写sequenceName之类的时候

sequenceName = "my_schema.my_table_id_seq"
Run Code Online (Sandbox Code Playgroud)

一切正常.

我对架构参数的含义有误解吗?还是一个错误?任何想法如何使架构参数工作?

postgresql schema hibernate sequence jpa-2.0

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

Ruby中的序列

ruby中有一个简单的函数来创建序列吗?例如,我想要一个从1增加到100的序列,增加3

Function(1,100,increment = 3) = [1,4,7,10, ...,97,100]
Run Code Online (Sandbox Code Playgroud)

谢谢!

ruby sequence

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

进入或vec:在Clojure中将序列转换回向量

我有以下代码,它增加了向量中每对的第一个元素:

(vec (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)

但是我担心这个代码不够优雅,因为它首先使用map创建一个序列,然后将其转换回矢量.

考虑这个类比:

(into [] (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)

在#clojure@irc.freenode.net上有人告诉我,使用上面的代码是不好的,因为into扩展到了(reduce conj [] (map-indexed ...)),在这个过程中产生了许多中间对象.然后我被告知实际上into并没有扩展到(reduce conj ...)可能的时候使用瞬态.同时测量经过的时间显示into实际上比...更快vec.

所以我的问题是:

  1. 使用map矢量的正确方法是什么?
  2. 当我使用vecinto向量时,下面会发生什么?

相关但不重复的问题:

vector clojure sequence

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

如何使用for循环制作向量

我对R(以及一般的编程)非常陌生,并且我已经坚持这个(可能非常简单)问题几天了......

如何3 6 12 24 48 96 192 384 768for循环制作矢量?

到目前为止,我设法提出的所有内容都是:

x=numeric()
for (i in 1:8) (x=2*i[-1])
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我认为其中一个主要问题是我不明白如何索引序列中的数字.

如果有人能指出我正确的方向,那将是一个很大的帮助!

indexing loops r vector sequence

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

如何匹配dna序列模式

我找不到解决这个问题的方法.

输入输出序列如下:

 **input1 :** aaagctgctagag 
 **output1 :** a3gct2ag2

 **input2 :** aaaaaaagctaagctaag 
 **output2 :** a6agcta2ag
Run Code Online (Sandbox Code Playgroud)

输入序列可以是10 ^ 6个字符,并且将考虑最大的连续模式.

例如,对于input2"agctaagcta"输出将不是"agcta2gcta",但它将是"agcta2".

任何帮助赞赏.

algorithm sequence matching dna-sequence

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

使用预定义的主键序列在h2数据库中创建表

我想在H2数据库中创建一个表.如何指定应从已创建的序列生成主键?

该序列称为group_seq,我使用以下语句创建它:

CREATE SEQUENCE GROUP_SEQ;
Run Code Online (Sandbox Code Playgroud)

因此,当我创建表时,如何指定我希望我的主键col(ID)使用该序列?

ddl h2 sequence

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