ฉันต้องการเขียนอัลกอริทึม "ultimate shuffle" เพื่อเรียงลำดับคอลเลกชัน mp3 ของฉัน


33

ฉันกำลังมองหาข้อเสนอแนะ pseudocode สำหรับจัดเรียงไฟล์ mp3 ของฉันในทางที่หลีกเลี่ยงชื่อและศิลปินซ้ำ ฉันฟัง crooners - Frank Sinatra, Tony Bennett, Ella Fitzgerald ฯลฯ ร้องเพลงมาตรฐานเก่า ศิลปินแต่ละคนบันทึกเพลงเดียวกันหลายเพลง - Fly Me To The Moon, The Way You Look Tonight, Stardust ฯลฯ เป้าหมายของฉันคือการจัดเรียงเพลง (หรือสั่งซื้อเพลย์ลิสต์) ด้วยพื้นที่สูงสุดระหว่างศิลปินและชื่อเพลง ดังนั้นถ้าฉันมี 2,000 เพลงและ 20 เพลงเป็นโดยเอลล่าฉันอยากจะได้ยินเธอเพียงครั้งเดียวในทุก ๆ 100 เพลง หากศิลปิน 10 คนร้องเพลง Fly Me To The Moon ฉันอยากได้ยินทุก ๆ 200 เพลง แน่นอนฉันต้องการรวมสองข้อกำหนดนี้เพื่อสร้าง "การสลับขั้นสูงสุด" ของฉัน

ฉันรู้ว่านี่เป็นคำถามเปิดกว้างพอสมควร ฉันยังไม่ได้เริ่มเขียนโปรแกรมดังนั้นฉันแค่มองหาคำแนะนำเกี่ยวกับแนวทางที่ดี จริง ๆ แล้วฉันมีข้อกำหนดอื่น ๆ เกี่ยวกับการเว้นระยะคุณลักษณะของเพลงอื่น ๆ อย่างสม่ำเสมอ แต่ฉันจะไม่ทำอย่างนั้น


เป็นจุดเริ่มต้นที่ฉันแก้ไขรหัสฉันพบที่นี่เพื่อจัดการไฟล์ mp3 และอ่านแท็ก ID3

ฉันเขียนแอปขนาดเล็กที่ตอบสนองความต้องการของฉันโดยใช้คำตอบของ parsifal ด้านล่าง ฉันยังเขียนติดตามคำถามที่นี่ ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมทั้งหมด!


3
คำถามเจ๋งปัญหาเจ๋ง ๆ ใครบางคนที่รู้อัลกอริธึมได้ดีจริงๆอาจมีคำตอบที่ดีโดยใช้วิธีทางการสำหรับคุณ
Jimmy Hoffa

ดังนั้นหาก 50% ของคอลเลกชันเพลงของคุณมาจากศิลปินคนเดียวกันคุณต้องการที่จะได้ยินศิลปินทุก ๆ 2 เพลงไม่ว่าศิลปินอื่น ๆ จะมีเท่าไหร่ ... อาจจะไม่มากถึง 50% แต่คุณจะได้รับ ความคิด อาจเป็นเพียงความคิดเห็นของฉัน แต่นั่นไม่ได้ดูเหมือน "สุดยอดสับเปลี่ยน" เว้นแต่ว่าคุณจะมีเพลงจำนวนเท่ากันจากศิลปินทุกคน ในทางกลับกันถ้าคุณมีเพียงเพลงเดียวของศิลปินคุณไม่ต้องการให้เล่นมากเกินไป การหาสมดุลระหว่าง 2 ไม่น่าจะยาก
Dukeling

ฉันแค่จะทำอะไรบางอย่างเช่น pseudocode นี้: while (length(songs) > 0) { x := rand(); addElem(shuffle, songs[x]); remElem(songs, x); }แต่คุณบอกว่าคุณต้องการ ผมไม่ทราบว่าสิ่งที่คุณต้องการจริงๆกับการที่ได้อ่านคำถาม ...
โคลจอห์นสัน

คุณสามารถอัปโหลดรายชื่อเพลงของคุณได้ที่ไหน
บ้าง

มันน่ารักที่มี (เป็นปลั๊กอินหรือแกนหลัก) ใน Banshee!
phw

คำตอบ:


5

คุณต้องการรันโปรแกรมของคุณหนึ่งครั้งและสร้างรายการเพลงหรือเลือกเพลงสดต่อไปหรือไม่?

ถ้าอย่างหลังคำตอบนั้นง่าย:

  • สร้างอาร์เรย์ที่มีเพลงทั้งหมดของคุณพร้อมศิลปินและชื่อ
  • สร้างรายการ (รายการที่ลิงก์ดีกว่า) เพื่อเก็บเพลงที่เพิ่งเล่นไป รายการนี้จะเริ่มว่างและทุกครั้งที่คุณเล่นเพลงที่คุณเพิ่มลงในรายการ เมื่อรายการมีขนาด "ไม่ต้องเล่นเพลงซ้ำ" ที่ต้องการให้ปล่อยรายการที่เก่าที่สุด (แรก)
  • เหมือนกันสำหรับรายชื่อศิลปิน

การเลือกเพลงจะกลายเป็นลำดับขั้นตอนต่อไปนี้:

  1. สุ่มเลือกเพลงจากอาเรย์ "ทุกเพลง" นี่เป็นเพียงตัวเลขสุ่มระหว่าง 0 ถึงขนาดของอาร์เรย์
  2. ดูว่าเพลงนั้นมีอยู่ในรายการเพลงที่เล่นหรือไม่ ถ้าเป็นเช่นนั้นกลับไปที่ขั้นตอน # 1
  3. ดูว่าศิลปินอยู่ในรายชื่อศิลปินที่เล่นหรือไม่ ถ้าเป็นเช่นนั้นกลับไปที่ขั้นตอน # 1
  4. เพิ่มศิลปินเพลง / ชื่อเรื่องลงในรายการที่เหมาะสมปล่อยรายการเก่าถ้าจำเป็น
  5. เล่นเพลง

มีปัญหาที่เป็นไปได้สองสามข้อ แต่สิ่งเหล่านี้ควรสำคัญหากคุณกำลังทำการบ้านและไม่ใช่โครงการจริง

  • ดังที่ @Dukeling กล่าวในความคิดเห็นหากคอลเลกชันของคุณไม่สมดุลอย่างเห็นได้ชัดในความโปรดปรานของศิลปินหรือชื่อเพลงเดียวคุณอาจเข้าสู่วงที่คุณปฏิเสธเพลงอยู่ตลอดเวลา ในทางปฏิบัติสิ่งนี้จะไม่เป็นปัญหา การแก้ปัญหาคือคุณต้องลดขนาดของรายการ "เห็นแล้ว" และการเพิ่มตัวนับที่ขั้นตอน # 2 และ # 3 สามารถบอกคุณได้ว่าเป็นปัญหาหรือไม่ (ถ้าคุณเห็นความล้มเหลว 10 รายการในแถวให้เตือนและ / หรือลดขนาดของรายการ)
  • หากคุณพยายามสร้างเพลย์ลิสต์ที่มีเพลงทั้งหมดของคุณเล่นเพียงครั้งเดียวคุณจะต้องลบเพลงออกจากอาร์เรย์แหล่งที่มา วิธีนี้จะเปลี่ยนวิธีที่คุณจัดการกับความล้มเหลวที่ "เพิ่งเล่น" ที่มากเกินไป (เพราะในที่สุดคุณอาจมีศิลปินเพียงคนเดียวในอาเรย์ของคุณ)
  • หากแท็ก ID3 ของคุณเป็นของฉันพวกเขามีการสะกดผิดมากมาย "Duke Ellington" จำเป็นต้องแตกต่างจาก "Duke Elingten" หรือไม่? ถ้าใช่ให้ดูที่การใช้ Levenstein matcher เมื่อสแกนรายการ "เพิ่งเล่น"

ฉันใช้ RockBox ( rockbox.org ) สำหรับโฟลเดอร์ของเพลงใด ๆ ก็สามารถสร้างรายการเพลงแบบไดนามิก (ที่สามารถบันทึกและคั่นหน้า) ฉันวางแผนที่จะนำหน้าชื่อเพลงแต่ละเพลง 0001, 0002 จากนั้นเล่นตามลำดับนั้น
DeveloperDan

@DeveloperDan - กระบวนการเดียวกันใช้งานได้ แต่ตามที่ฉันทราบในตอนท้ายคุณอาจมีเพลงที่ไม่สอดคล้องกับกฎ คุณมีสองทางเลือก: ปรับกฎและรันใหม่หรือ (ถ้ามีไม่มาก) ใส่เพลงแบบสุ่ม
parsifal

ฉันจะสร้างรายการในขั้นตอนที่ 1 และลบออกจากรายการใน 2 และ 3 ที่ทำให้มันเป็นไปไม่ได้ที่จะติดอยู่ในวงและถ้ารายการว่างเปล่าคุณรู้ว่าคุณต้องเปลี่ยนกฎและสแกนซ้ำอีกครั้ง วิธีที่แข็งแกร่งมากขึ้นในการทำมัน
Macke

13

ฉันได้ทำสิ่งนี้ก่อนที่จะใช้ตัวสร้าง (ใน C #, วงวนไม่สิ้นสุดที่yieldวนซ้ำแต่ละรอบ) การวนซ้ำแต่ละครั้งจะดูที่กลุ่มของเพลง (หรืออะไรก็ตาม) และโยนเพลงที่เล่นเร็วเกินไป (หรือเกณฑ์เชิงลบ) จากนั้นคุณเลือกหนึ่งรายการจากรายการที่กรองแล้วและอัพเดตสถานะของคุณ ในขณะที่สถานะของคุณดริฟท์ (คุณเล่นเพลงที่ไม่ใช่ซินาตร้า) เกณฑ์แบ่งลงและเพลงที่ถูกแยกของคุณจะเริ่มรวมใหม่

แน่นอนว่ามีเรื่องมุมที่จะจัดการกับ:

  • จะเกิดอะไรขึ้นถ้าคุณโยนเพลงทั้งหมดออกไป (โดยปกติจะเลือกเพียงแค่สุ่มโดยหวังว่าจะทำให้รัฐไม่มั่นคง)
  • เกณฑ์บางอย่างควรเป็นที่ต้องการหรือไม่ (โดยปกติคือกรณีบางทีคุณอาจไม่ต้องการเล่น Fly Me to the Moon กลับไปกลับมาและไม่ต้องการเล่น Sinatra ย้อนหลัง แต่ถ้านั่นคือทั้งหมดที่คุณมี ...
  • จะเกิดอะไรขึ้นถ้าคอลเลคชั่นเพลงของคุณได้รับการอัพเดทในช่วงกลางการต่อสู้? (มักจะง่ายต่อการจัดการ แต่การเกิดพร้อมกันอาจมีปัญหาขึ้นอยู่กับการใช้งาน)

11

ละเว้นค่าผิดปกติของคำถามของคุณที่ Telastyn นำขึ้นก็เสียงเหมือนคุณมีรูปแบบที่หลากหลายเป็นปัญหาเป้ โชคดีที่มันเป็นอัลกอริธึมที่บันทึกไว้ค่อนข้างดี

จากวิกิพีเดีย

กำหนดชุดของรายการแต่ละรายการที่มีน้ำหนักและค่ากำหนดจำนวนของแต่ละรายการเพื่อรวมไว้ในคอลเลกชันเพื่อให้น้ำหนักรวมน้อยกว่าหรือเท่ากับขีด จำกัด ที่กำหนดและมูลค่ารวมมีขนาดใหญ่ที่สุด

มีบางรูปแบบที่เกี่ยวข้องที่อาจมีการระบุไว้ในบทความนั้นพร้อมกับรายการเพิ่มเติมของปัญหาเครื่องหลัง


รูปแบบหนึ่งของปัญหาเครื่องหลังคือปัญหาเครื่องหลังอเนกประสงค์ อาณานิคมมดขั้นตอนวิธีการแนะนำเป็นวิธีการแก้ปัญหาที่ วิธีฝูงมดอาจเป็นวิธีที่ง่ายที่สุดสำหรับคุณที่จะหลีกเลี่ยงแง่มุม NP ของคำถามของคุณ

ฉันอาจเห็นว่าการพิจารณาปัญหาของคุณเป็นปัญหาที่แตกต่างอย่างมากของปัญหาพนักงานขายเดินทาง แต่ละเมืองที่จะไปเป็นเพลงที่คุณต้องการเล่น แต่ฉันไม่แน่ใจว่าคุณจะระบุช่วงเวลาระหว่างศิลปินอย่างไร คำแนะนำนี้เกี่ยวข้องกับ / สามารถแก้ไขได้โดยวิธีการของฝูงมด


8

ฉันทำงานภายใต้ข้อสันนิษฐานว่านี่คือ "นี่คือห้องสมุดของฉันรันโปรแกรมนี้และสร้างคำสั่งเล่นเพลง"

สิ่งนี้ยังไม่ถูกนำมาใช้และฉันไม่แน่ใจว่ามันจะ preform สับเปลี่ยนได้ดีเพียงใด อาจเป็นไปได้ว่าตัวฉันค่อนข้างเข้มงวดเกินไปในตัวกรองซึ่งจะส่งผล (ฉันเชื่อว่า) ตามลำดับที่กำหนดสำหรับส่วนที่เหลือที่ได้รับชุดเริ่มต้นของเพลง

หนึ่งมีideal_gapแฮช ซึ่งคำนวณโดยความหนาแน่นของเพลงที่มีคุณสมบัติที่กำหนดไว้ (ศิลปินอัลบั้มชื่อ) หากมี 2,000 เพลงและ 20 เพลงในนั้นมีศิลปินชื่อ Ella ideal_gap{'artist'}{"ella"}ก็จะเป็น 100

การมีข้อมูลนี้จะมีค่า ideal_gap สูงสุด max_gapให้เรียกสิ่งนี้ว่า

ลองพิจารณา: มีค่าสูงสุดในideal_gapการป้องกันเพลงที่มีศิลปินเพียงสองคนเท่านั้นที่ร้องเพลงจากเพลงอื่นไม่ให้เล่น 1,000 เพลงในภายหลังและเพิ่มค่า max_gap อย่างมากทำให้เกิดการวนซ้ำของเพลง "back off, no songs, back" ปิดไม่มีเพลง "

ตรวจสอบเพลง max_gap ล่าสุดที่เล่น (ซึ่งสามารถเติมข้อมูลได้จากการเรียกใช้ก่อนหน้านี้ดังนั้นถ้าเสร็จกับ Frank Sinatra ร้องเพลง Fly Me To the Moon การรันครั้งถัดไปจะไม่เริ่มต้นด้วยเพลงเดียวกันโดยบังเอิญ) มีการกรองเพลงหนึ่งรายการจาก ห้องสมุดส่งผลให้ชุดของเพลงที่ผู้สมัคร เพลงจะอยู่ในเพลงของผู้สมัครหากช่องว่างทั้งหมดนั้นน้อยกว่าideal_gapสำหรับคุณสมบัติเหล่านั้น

จากชุดของเพลงที่ผู้สมัครเลือกหนึ่งโดยการสุ่ม

ลองพิจารณา: ถ่วงน้ำหนักชุดเพลงเพื่อให้แอตทริบิวต์ที่มีช่องว่างสูงสุดสูงกว่ามีแนวโน้มที่จะมีน้ำหนักมากกว่า ด้วยวิธีนี้ไม่มีเพลงช่องว่างสูงสุดที่ใหญ่กว่าซ้อนกันในตอนท้ายของเพลย์ลิสต์

ลองพิจารณา: แทนที่จะให้ทั้งสามคุณสมบัติมีค่ามากกว่าช่องว่างในอุดมคติเพียงแค่สองในสาม นี่อาจหมายความว่าบางสิ่งสามารถเล่นได้เร็วกว่าอุดมคติในอุดมคติ แต่การเพิ่มขนาดของชุดเพลงที่ผู้สมัครหมายถึง "การเลือกหนึ่งรายการแบบสุ่ม" มีตัวเลือกเพิ่มเติม

หากไม่มีเพลงที่เติมเต็มความต้องการให้ถอยกลับไปทีmax_gapละ 1 และ ideal_gaps ทั้งหมดด้วยn/max_gapเปอร์เซ็นต์ซึ่งnเป็นจำนวนครั้งที่มีการสำรองข้อมูล วิธีนี้ถ้ามีmax_gap100 และถูกสำรองออก 5 ครั้งในการทำซ้ำนี้อุดมคติ _gap ของ 100 จะถูกปรับเป็นชั่วคราว 95 และอุดมคติ _gap 20 จะถูกปรับเป็น 19 ชั่วคราวทำซ้ำการสำรองข้อมูล ช่องว่างจนกว่าจะมีเพลงอย่างน้อยหนึ่งเพลงแล้วเลือกเพลงดังกล่าว

พิจารณา: มีขนาดพูลขั้นต่ำ สิ่งนี้จะเพิ่มความแปรปรวน แต่อาจส่งผลให้มีการเล่นเพลงเร็วกว่าช่องว่างในอุดมคติเมื่อมีเพลงอื่นที่สามารถเล่นได้


1

นี่คืองานที่เพิ่มประสิทธิภาพและมีความซับซ้อนสวยหนึ่งถ้าคุณกำลังมองหาทางออกที่ดีที่สุด โชคดีที่ฉันเชื่อว่ามันเป็นหนึ่งในกรณีเหล่านั้นที่ดีพอที่จะทำ

สิ่งแรกที่ต้องทำคือการสร้างเกณฑ์คุณภาพทางคณิตศาสตร์นั่นคือสูตรที่ให้การเรียงสับเปลี่ยนของรายการจะส่งกลับหมายเลขเดียวที่อธิบายถึงวิธีการเปลี่ยนรูปที่ดีหรือไม่ดี

คำแนะนำสูตรอย่างง่ายเกณฑ์แต่ละข้อที่คุณต้องการนำมาพิจารณาควรมีน้ำหนักให้น้ำหนักสูงถึงเกณฑ์ที่สำคัญและน้ำหนักต่ำถึงเกณฑ์ที่เพลงจำนวนมากแบ่งปันคุณสมบัติเดียวกันเพื่อที่จะไม่ได้ครอบครอง :

For each song on the list
    For each other song on the list
        For each criteria
            If the two songs share that criteria
                Add to the quality value: square root( [criteria weight]/[distance between the two songs] )

ยิ่งค่าต่ำสุดที่กระบวนการนี้สร้างขึ้นการเรียงลำดับรายการก็จะยิ่งดีขึ้น

ทำให้เกิดการเปลี่ยนแปลง

ตอนนี้คุณสามารถนำสูตรนี้ไปใช้กับ math.stackexchange และให้พวกเขาบอกคุณว่าวิธีที่ยากและเป็นไปไม่ได้ในทางปฏิบัติคือการหาทางออกที่ดีที่สุดสำหรับทุกสิ่งยกเว้นจำนวนเพลงเล็ก ๆ น้อย ๆ หรือคุณแค่โยนวงจรนาฬิกาที่มัน ทางออกที่ดี

มีหลายวิธีในการทำสิ่งนี้ที่นี่เป็นวิธีหนึ่ง:

Start with a random permutation of the list.
Several million times do the following:
    Select two entries at random
    For each of those two entries calculate their contribution to the quality value
    Swap the positions of the two entries
    Calculate the contribution to the quality value of the two entries at their new position
    If the sum of the calculations in the new positions is greater than the sum in the old positions
        Swap back

นี่เป็นอัลกอริธึมที่ค่อนข้างสิ้นเปลือง แต่มันง่ายที่จะนำไปใช้และสามารถจัดการกับเกณฑ์ได้มากเท่าที่ต้องการ

การเพิ่มประสิทธิภาพ

สามารถปรับใช้การปรับแต่งและปรับแต่งค่าต่าง ๆ ได้มากมายดังนี้:

ในการคำนวณค่าคุณภาพอย่าไปตรวจสอบเพลงเทียบกับเพลงอื่นในรายการแทนเพียงตรวจสอบกับ 100 เพลงที่ใกล้เคียงที่สุด สำหรับค่าทั่วไปการเพิ่มประสิทธิภาพความเร็วนี้ไม่มีผลกับคุณภาพของผลลัพธ์

สำหรับมูลค่าที่หายากของคุณสมบัติที่กำหนดอาจมีประสิทธิภาพมากกว่าในการติดตามอินสแตนซ์ที่มีอยู่ของค่านั้นมากกว่าการค้นหา

หากคุณรู้สึกว่ามันเป็นสิ่งสำคัญที่ค่าที่มีอินสแตนซ์เพียงไม่กี่ตัวเว้นระยะห่างเข้าใกล้แม้จะห่างกันมากก็อาจจำเป็นต้องเพิ่มน้ำหนักสำหรับค่าเฉพาะเหล่านั้น แต่ไม่ใช่สำหรับค่าอื่น ๆ ของเกณฑ์นั้น

ฟังก์ชั่นสุ่มหลอกที่เลือกคู่ที่เป็นไปได้ทั้งหมดจากรายการในการกระจายที่เท่ากันอาจมีประสิทธิภาพที่ดีขึ้นเล็กน้อยต่อการเลือกกว่าการสุ่มสุ่มแบบปกติ


ฉันเชื่อว่าอัลกอริทึมของคุณเป็นรูปแบบของการหลอมจำลองซึ่งอาจเป็นสถานที่ที่จะมองหาเพื่อปรับแต่งเพิ่มเติม

@MichaelT ไม่จำลองการอบใช้ "อุณหภูมิ" ที่อนุญาตให้ถอยหลังไปสู่สถานะที่ต่ำกว่าในความพยายามที่จะหลีกเลี่ยงการถูกจับในระดับสูงสุดในท้องถิ่น นี่เป็นเพียงการค้นหาในท้องถิ่นสามารถแก้ไขเป็นแบบจำลองการอบอ่อนหรืออัลกอริทึมการค้นหาความน่าจะเป็นอื่น ๆ ได้ค่อนข้างง่าย แต่ฉันไม่คิดว่ามีความต้องการมาก โดยทั่วไปสิ่งที่อัลกอริธึมอื่น ๆ ทำแตกต่างกันคือพยายามหลีกเลี่ยงจุดสูงสุดในท้องถิ่น แต่ฉันไม่คิดว่าคุณจะพบจุดสูงสุดในท้องถิ่นสำหรับปัญหานี้ซึ่งไม่ใช่วิธีการแก้ปัญหาที่ยอมรับได้
aaaaaaaaaaaa

0

เป็นที่น่าสนใจว่าผู้คนใช้วิธีการต่าง ฉันทำต่อไปนี้:

ตามแทร็กทั้งหมดที่เล่นจนถึงให้คะแนนแต่ละคะแนน เล่นแทร็กที่มีคะแนนต่ำสุด (หรือในกรณีที่มีคะแนนเท่ากันจะเป็นการสุ่มที่ตรงกับคะแนนต่ำสุด) ทำซ้ำ

แน่นอนว่าเรื่องยากคือการให้คะแนน สำหรับแต่ละแทร็กที่เป็นไปได้ที่คุณอาจเล่นต่อไปคุณจะต้องผ่านแต่ละแทร็ก (หรือจำนวน จำกัด ) ที่คุณได้เล่นไปแล้ว หากแทร็ก [เป็นไปได้ถัดไป] และแทร็ก [เล่นล่าสุด] มีบางอย่างที่เหมือนกันคุณจะเพิ่มคะแนนขึ้นอยู่กับว่าพวกเขามีเหมือนกันมากเท่าไหร่สิ่งที่พวกเขามีเหมือนกันและนานแค่ไหนที่แทร็ก [เพิ่งเล่น] เล่น คุณอาจต้องการให้ "ไม่มีอะไรที่เหมือนกันทั้งหมด" เป็น 0 ดังนั้นคุณสามารถเริ่มต้นด้วยแทร็กทั้งหมดเป็น 0

คุณอาจต้องการทดลองเล่นเพลย์ลิสต์ที่สร้างขึ้นด้วยมือเพื่อเริ่มการคำนวณคณิตศาสตร์ให้ถูกต้องหรือไม่คุณต้องการจำนวนคำที่เหมือนกันหรือสี่เหลี่ยมของจำนวนคำที่เหมือนกันหรือสแควร์รูทของจำนวน ของคำที่เหมือนกัน? เรียกใช้เพลย์ลิสต์ทั้งหมดของคุณดูว่าเพลย์ลิสต์ใดลอยขึ้นไปข้างบนว่าเป็น "สามัญมากที่สุด" และปรับแต่งปัจจัยเพื่อให้เกิดความสมดุล บางทีคุณต้องการไปต่อตัวอักษรดังนั้น "Duke Ellington" มีคะแนนสูงเมื่อเทียบกับ "Duke Elington" แต่คะแนนที่สูงขึ้นเมื่อเทียบกับ "King Elle Duton" (ถ้าฉันไม่ได้ทำจดหมายหาย :) . คุณควรพิจารณาอย่างรอบคอบว่าฟิลด์ใดที่คุณต้องการเปรียบเทียบและถ้าคุณต้องการเปรียบเทียบระหว่างฟิลด์ คุณอาจพิจารณา bigrams (ตัวอักษรคู่; ในกรณีของ Duke ellington, "Du", "

โปรดทราบว่าหากคุณมีศิลปินจำนวนมากศิลปินคนนั้นอาจจะถูกลดความสำคัญลงไป - คุณอาจได้ยินแทร็กจากศิลปินที่มีเอกลักษณ์ 5 ครั้งก่อนที่คุณจะได้ยินเพลงของ Duke Ellington ทั้ง 10 เพลง นี่อาจจะใช่หรือไม่ใช่อย่างที่คุณต้องการ คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยการตั้งค่าพจนานุกรมของทุกสิ่งที่คุณต้องเปรียบเทียบและความถี่ที่จะเกิดขึ้นดังนั้นหากคุณมีแทร็กของ Duke Ellington จำนวนมากสองแทร็กที่ Duke Ellington มี "คล้ายกัน" น้อยกว่า Billy Billy Shaver .

มันอาจจะคุ้มค่าที่จะเตรียมตารางล่วงหน้าด้วยการรวมกันของเพลงสองคู่ เมื่อพิจารณาถึงเพลงที่จะเล่นถัดไปคุณจะต้องจดจำเพลงที่ดีที่สุดเท่านั้น หากเพลงถัดไปที่ต้องพิจารณามีคะแนนแย่กว่าเพลงที่ดีที่สุดจนถึงตอนนี้คุณสามารถข้ามไปยังเพลงถัดไปได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.