Just algorithm!
Minimum Scalar Product



ข้อนี้โจทย์ให้จับคู่ vector

แล้วให้เอาแต่ละจุดของ vector มาคูณกัน

โดยต้องได้ผลรวมที่น้อยที่สุด

อ่านต่อ ที่นี่



วิธีคิดก็ง่ายมาก ก็ให้ vector นึงเรียงจากน้อยไปมาก

อีก vector ก็เรียงมากไปน้อยแล้วคูณกันก็จบ
let solve seq1 seq2 =
    let seq1 = seq1 |> Seq.sort
    let seq2 = seq2 |> Seq.sortBy (~-)    // Unary minus
    Seq.zip seq1 seq2 |> Seq.map (fun (a, b) -> int64 a * int64 b)
                      |> Seq.sum
                      |> string

ใน f# การประกาศทับตัวแปรเดิมเค้าเรียกว่า shadowing

เช่น let seq1 = seq1 |> Seq.sort

จริงๆ ก็เหมือน imparative แต่ shadowing จะพิเศษกว่าตรงที่ ตัวแปลแรกกับตัวแปรหลังไม่เกี่ยวข้องกันเลย

เช่น เราสามารถเปลี่ยน type ของตัวแปรก็ได้



และใน f# เราไม่มี sort descending เลยต้อง sortBy negative แทน

อีกอย่างคือ operator ของ f# จะไม่ซ้ำกันเลย ดังนั้น minus กับ unary minus มี symbol ต่างกัน



ส่วน zip คือ จับคู่ item ใน list

แล้วเราก็เอามาคูณกัน แล้วก็หาผลรวม



จบ




Create Date : 15 พฤศจิกายน 2557
Last Update : 15 พฤศจิกายน 2557 11:10:02 น. 0 comments
Counter : 381 Pageviews.

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

chaowman
Location :
กรุงเทพฯ Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]





New Comments
Group Blog
 
All Blogs
 
Friends' blogs
[Add chaowman's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.