Sunulan çözümlerin zaman karşılaştırması (cevap değil)
Cevapların etkinliği önemli değil. Yine de, josephwb yaklaşımını izleyerek sunulan tüm cevapları zamanlamaya çalıştım.
Victor Hugo "Les Miserables" (harika kitap!) 'In Portekizce tercümesini girdi olarak kullanıyorum ve "a" nın oluşumlarını sayıyorum. Sürümümde 5 cilt var, birçok sayfa ...
$ wc miseraveis.txt
29331 304166 1852674 miseraveis.txt
C cevapları gcc ile derlendi (optimizasyon yok).
Her cevap 3 kez çalıştırıldı ve en iyisini seçti.
Bu sayılara çok fazla güvenmeyin (makinem başka işler yapıyor, vb.). Bu zamanları seninle paylaşıyorum, çünkü beklenmedik sonuçlar aldım ve daha fazlasını bulacağına eminim.
- 16 zamanlanmış çözümün 14'ü 1 saniyeden daha az sürdü; 9'u 0,1 saniyeden az, çoğu boru kullanıyor
- Satır satır bash kullanarak 2 çözüm, yeni işlemler oluşturarak 30k satır işledi, 10s / 20s içinde doğru çözümü hesaplayın.
grep -oP a
ağaç zamanından daha hızlıdır grep -o a
(10; 11 - 12)
- C ve diğerleri arasındaki fark beklediğim kadar büyük değil. (7; 8 ve 2; 3)
- (sonuçlar kabul edilir)
(rastgele sırayla sonuçlanır)
=========================1 maxschlepzig
$ time sed 's/[^a]//g' mis.txt | awk '{print length}' > a2
real 0m0.704s ; user 0m0.716s
=========================2 maxschlepzig
$ time tr -d -c 'a\n' < mis.txt | awk '{ print length; }' > a12
real 0m0.022s ; user 0m0.028s
=========================3 jjoao
$ time perl -nE 'say y!a!!' mis.txt > a1
real 0m0.032s ; user 0m0.028s
=========================4 Stéphane Gimenez
$ function countchar(){while read -r i; do echo "$i"|tr -dc "$1"|wc -c; done }
$ time countchar "a" < mis.txt > a3
real 0m27.990s ; user 0m3.132s
=========================5 Loki Astari
$ time awk -Fa '{print NF-1}' mis.txt > a4
real 0m0.064s ; user 0m0.060s
Error : several -1
=========================6 enzotib
$ time awk '{ gsub("[^a]", ""); print length }' mis.txt > a5
real 0m0.781s ; user 0m0.780s
=========================7 user606723
#include <stdio.h> #include <string.h> // int main(int argc, char *argv[]) ... if(line) free(line); }
$ time a.out a < mis.txt > a6
real 0m0.024s ; user 0m0.020s
=========================8 maxschlepzig
#include <stdio.h> // int main(int argc, char **argv){if (argc < 2 || !*argv[1]) { ... return 0; }
$ time a.out a < mis.txt > a7
real 0m0.028s ; user 0m0.024s
=========================9 Stéphane Chazelas
$ time awk '{print gsub(/a/, "")}'< mis.txt > a8
real 0m0.053s ; user 0m0.048s
=========================10 josephwb count total
$ time grep -o a < mis.txt | wc -w > a9
real 0m0.131s ; user 0m0.148s
=========================11 Kannan Mohan count total
$ time grep -o 'a' mis.txt | wc -l > a15
real 0m0.128s ; user 0m0.124s
=========================12 Kannan Mohan count total
$ time grep -oP 'a' mis.txt | wc -l > a16
real 0m0.047s ; user 0m0.044s
=========================13 josephwb Count total
$ time perl -ne '$x+=s/a//g; END {print "$x\n"}'< mis.txt > a10
real 0m0.051s ; user 0m0.048s
=========================14 heemayl
#!/usr/bin/env python2 // with open('mis.txt') as f: for line in f: print line.count('"')
$ time pyt > a11
real 0m0.052s ; user 0m0.052s
=========================15 enzotib
$ time while IFS= read -r line; do line="${line//[!a]/}"; echo "${#line}"; done < mis.txt > a13
real 0m9.254s ; user 0m8.724s
=========================16 bleurp
$ time awk ' {print (split($0,a,"a")-1) }' mis.txt > a14
real 0m0.148s ; user 0m0.144s
Error several -1