0
私は私のマージをしようとしているparallelの代わりに、私は並列ライブラリを使用しようとしましたが、動作しません(私は正確にそれを使用する方法を知らないその内部にマージ機能を入れるが、私の入力では機能しない)。R - どのように私のmergesortを並列化する
1行に1文字列のtxtファイルを入力してソートする必要があります。
これは私のシーケンシャルコードです:
#start time
strt<-Sys.time()
#merge sort
mmerge<-function(a,b) {
r<-numeric(length(a)+length(b))
ai<-1; bi<-1; j<-1;
for(j in 1:length(r)) {
if((ai<=length(a) && a[ai]<b[bi]) || bi>length(b)) {
r[j] <- a[ai]
ai <- ai+1
} else {
r[j] <- b[bi]
bi <- bi+1
}
}
r
}
mmergesort<-function(A) {
if(length(A)>1) {
q <- ceiling(length(A)/2)
a <- mmergesort(A[1:q])
b <- mmergesort(A[(q+1):length(A)])
mmerge(a,b)
} else {
return(A)
}
}
#!/usr/bin/env Rscript
args = commandArgs(trailingOnly=TRUE)
# args test
if (length(args)==0 | length(args)==1) {
stop("Arquivo de entrada e saida devem ser fornecidos (input.txt, output.txt)", call.=FALSE)
}
#read file
input <- read.table(file=args[1], header=F)
#vector parser
input <- as.character(input[,1])
#sort
ordenado <- mmergesort(input)
#write file
write(ordenado, file=args[2], sep = "\t")
#end time
print(Sys.time()-strt)
'sort'のような組み込み関数を使うことができない理由はありますか? https://stat.ethz.ch/R-manual/R-devel/library/base/html/sort.html –
私は、1行につき1語のファイルを読む必要があると仮定すると、 'ordered < - sort(words [、1])'を使用します。これははるかに簡単だろうか? –
原因はO(nlogn)でなければならず、rの通常のソートはO(n)です。 –