การเปรียบเทียบเวลาของโซลูชันที่นำเสนอ (ไม่ใช่คำตอบ)
ประสิทธิภาพของคำตอบนั้นไม่สำคัญ อย่างไรก็ตามตามวิธีการ @josephwb ฉันพยายามกำหนดเวลาคำตอบทั้งหมดที่นำเสนอ
ฉันใช้เป็นอินพุตในการแปลภาษาโปรตุเกสของ Victor Hugo "Les Miserables" (หนังสือยอดเยี่ยม!) และนับการเกิด "a" รุ่นของฉันมี 5 เล่มหลายหน้า ...
$ wc miseraveis.txt
29331 304166 1852674 miseraveis.txt
คำตอบ C ถูกรวบรวมด้วย gcc (ไม่มีการเพิ่มประสิทธิภาพ)
แต่ละคำตอบถูกเรียกใช้ 3 ครั้งและเลือกที่ดีที่สุด
อย่าไว้ใจตัวเลขเหล่านี้มากเกินไป (เครื่องของฉันกำลังทำงานอื่น ๆ ฯลฯ ) ฉันแบ่งปันเวลาเหล่านี้กับคุณเพราะฉันได้รับผลลัพธ์ที่ไม่คาดคิดและฉันแน่ใจว่าคุณจะพบอีก ...
- โซลูชันที่หมดเวลา 14 จาก 16 รายการใช้เวลาน้อยกว่า 1 วินาที 9 น้อยกว่า 0.1 วินาทีส่วนมากใช้ท่อ
- โซลูชัน 2 รายการที่ใช้ bash line ต่อบรรทัดประมวลผล 30k บรรทัดโดยสร้างกระบวนการใหม่คำนวณโซลูชันที่ถูกต้องใน 10s / 20s
grep -oP a
ต้นไม้เร็วขึ้นแล้วgrep -o a
(10; 11 vs 12)
- ความแตกต่างระหว่าง C และอื่น ๆ นั้นไม่ใหญ่อย่างที่ฉันคาดไว้ (7; 8 กับ 2; 3)
- (ยินดีต้อนรับข้อสรุป)
(ผลลัพธ์แบบสุ่ม)
=========================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