ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingขอถามแนวคิดในการเขียนโปรแกรมหน่อยนะ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ขอถามแนวคิดในการเขียนโปรแกรมหน่อยนะ  (อ่าน 2087 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
sisi
สมุนแก๊งเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 917



ดูรายละเอียด
« เมื่อ: 15 พฤศจิกายน 2007, 21:42:29 »

สมมุติว่า มี แผนที่ ขนาด 1000x1000 ตาราง ภายในแผนที่มีตำแหน่งของ ขุมทรัพย์อยู่ 7 อัน (เราไม่รู้ว่ามันอยู่ตรงไหนมั่ง)

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


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


ขอบคุณมากครับ

บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 15 พฤศจิกายน 2007, 22:07:45 »

นึกไม่ค่อยออกแฮะ

แต่ลองเป็นว่า

1. สร้างอาเรย์ข้อมูลเลียนแบบตาราง 1000*1000 ไว้เก้บค่าว่าเราตรวจช่องไหนไปแล้ว
2. สุ่มค่าระหว่าง 1 ถึง 1000 ออกมา 2 ค่า ใช้อ้างอิงแทนแกน X กับ Y ของตาราง
3. สั่งตรวจสอบตารางด้วยค่า X กะ Y จากข้อ 2  แล้วถ้าไม่เจอก็เก็บลงอาเรย์
ถ้ามีการตรวจแล้ว ก็ไม่ต้องตรวจ  ถ้าเจอก็เก็บแยกลงลิสว่าเจอช่องไหน

เพียงแต่เราก็ต้องมาคิดด้วยว่า
ใช้สุ่มแบบข้างบน กะ ไล่ตรวจเลย อย่างไหนจะดีกว่า

ไล่ตรวจแบบรันตามเลข ข้อดีคือไม่ต้องตรวจว่ามีการตรวจแล้วหรือเปล่า
แต่กลับกัน การสุ่ม ก็สร้างโอกาสการเข้าถึงข้อมูลได้เร็วกว่า

ถ้านึกบ้านๆ ระหว่าง RAM กับ HD ที่ใช้วิธีการเข้าถึงข้อมูลต่างกัน
แบบไหนเร็วกว่ากัน  :Smiley

(ผมไม่ได้เรียนด้านสถาปัตยกรรมคอมพิวเตอร์มา เลยบอกแบบฟันธงไม่ได้ครับ)
บันทึกการเข้า

ColdMoney
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 200
ออฟไลน์ ออฟไลน์

กระทู้: 12,622



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 15 พฤศจิกายน 2007, 22:09:12 »

แล้วมีข้อกำหนดไงบ้างล่ะครับ เช่นว่า ต้องหาได้ทีล่ะ 1 ช่อง และช่องต่อไปต้องติดกันไหม เป็นรูปแบบของการเดินหาสมบัติป่ะครับ หรือว่าสามารถหาพร้อมๆกันได้ทีล่ะหลายช่อง แล้วขุมทรัพท์แต่ล่ะจุดเนี่ย กว้างยาวเท่ากับ 1x1 ป่ะครับ  Huh?
« แก้ไขครั้งสุดท้าย: 15 พฤศจิกายน 2007, 22:10:44 โดย ColdMoney » บันทึกการเข้า

sisi
สมุนแก๊งเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 917



ดูรายละเอียด
« ตอบ #3 เมื่อ: 15 พฤศจิกายน 2007, 22:16:00 »

แล้วมีข้อกำหนดไงบ้างล่ะครับ เช่นว่า ต้องหาได้ทีล่ะ 1 ช่อง และช่องต่อไปต้องติดกันไหม เป็นรูปแบบของการเดินหาสมบัติป่ะครับ หรือว่าสามารถหาพร้อมๆกันได้ทีล่ะหลายช่อง แล้วขุมทรัพท์แต่ล่ะจุดเนี่ย กว้างยาวเท่ากับ 1x1 ป่ะครับ  Huh?

ขุมทรัพย์เป็นแบบ 1x1 ช่องครับ รูปแบบจริงๆ อาจารย์เค้าบอกว่า เลียนแบบการ์ตูนเรื่อง ดราก้อนบอลหน่ะครับ ที่ต้องหาลูกแก้ว ทั้ง 7 ลูก บนพื้นพิภพนี้ให้ได้โดยไวที่สุด ถ้าเจอแล้วก็ให้บอกมาเป็นพิกัด x*y หน่ะครับ

อ้างถึง
นึกไม่ค่อยออกแฮะ

แต่ลองเป็นว่า

1. สร้างอาเรย์ข้อมูลเลียนแบบตาราง 1000*1000 ไว้เก้บค่าว่าเราตรวจช่องไหนไปแล้ว
2. สุ่มค่าระหว่าง 1 ถึง 1000 ออกมา 2 ค่า ใช้อ้างอิงแทนแกน X กับ Y ของตาราง
3. สั่งตรวจสอบตารางด้วยค่า X กะ Y จากข้อ 2  แล้วถ้าไม่เจอก็เก็บลงอาเรย์
ถ้ามีการตรวจแล้ว ก็ไม่ต้องตรวจ  ถ้าเจอก็เก็บแยกลงลิสว่าเจอช่องไหน

เพียงแต่เราก็ต้องมาคิดด้วยว่า
ใช้สุ่มแบบข้างบน กะ ไล่ตรวจเลย อย่างไหนจะดีกว่า

ไล่ตรวจแบบรันตามเลข ข้อดีคือไม่ต้องตรวจว่ามีการตรวจแล้วหรือเปล่า
แต่กลับกัน การสุ่ม ก็สร้างโอกาสการเข้าถึงข้อมูลได้เร็วกว่า

ถ้านึกบ้านๆ ระหว่าง RAM กับ HD ที่ใช้วิธีการเข้าถึงข้อมูลต่างกัน
แบบไหนเร็วกว่ากัน 

(ผมไม่ได้เรียนด้านสถาปัตยกรรมคอมพิวเตอร์มา เลยบอกแบบฟันธงไม่ได้ครับ)

คิดเหมือนผมเลยอ่ะ ผมว่าถ้าไล่ตรวจนี่ มันแน่นอนเลยครับว่าเจอแน่ๆ แต่ว่ามันกินเวลานานมาก
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 15 พฤศจิกายน 2007, 22:26:44 »

แล้วมีข้อกำหนดไงบ้างล่ะครับ เช่นว่า ต้องหาได้ทีล่ะ 1 ช่อง และช่องต่อไปต้องติดกันไหม เป็นรูปแบบของการเดินหาสมบัติป่ะครับ หรือว่าสามารถหาพร้อมๆกันได้ทีล่ะหลายช่อง แล้วขุมทรัพท์แต่ล่ะจุดเนี่ย กว้างยาวเท่ากับ 1x1 ป่ะครับ  Huh?

ขุมทรัพย์เป็นแบบ 1x1 ช่องครับ รูปแบบจริงๆ อาจารย์เค้าบอกว่า เลียนแบบการ์ตูนเรื่อง ดราก้อนบอลหน่ะครับ ที่ต้องหาลูกแก้ว ทั้ง 7 ลูก บนพื้นพิภพนี้ให้ได้โดยไวที่สุด ถ้าเจอแล้วก็ให้บอกมาเป็นพิกัด x*y หน่ะครับ

แสดงว่าเป็นการเข้าค้นหา ณ ช่วงเวลานั้นๆ ได้ 1 ครั้ง ?

งั้นคงต้องเลือกเอาละครับ ระหว่าง ไล่ค้นหา กับสุ่มค้นหา
เพราะโจทย์ไม่ได้บอกอะไรมากนักเลย

ผมว่างานนี้ต้องลองเขียนทดสอบแล้วจับเวลาดูครับ จะดีที่สุดครับ  Tongue


บันทึกการเข้า

sisi
สมุนแก๊งเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 917



ดูรายละเอียด
« ตอบ #5 เมื่อ: 15 พฤศจิกายน 2007, 22:27:24 »

รบกวนพี่ๆช่วยดูอันนี้หน่อยนะครับ พอดีวันนี้อาจารย์เปิดวิธีการหาให้ดู (อันนี้จำลองมานะ)

วิธี A


วิธี B



วิธี A ที่ผมไม่ค่อยสงสัยเท่าไหร่ เพราะให้วิธีวนหาแบบ ถึก ตามแบบธรรมดาทั่วไป

แต่ B นี่ดิครับ ผมงงว่าการเดินของมันเป็นแบบนั้นได้ยังไง มันคิดยังไงถึงเดินออกมาได้แบบนั้น
บันทึกการเข้า
paradox_073
สมุนแก๊งเสียว
*

พลังน้ำใจ: 30
ออฟไลน์ ออฟไลน์

กระทู้: 720



ดูรายละเอียด
« ตอบ #6 เมื่อ: 15 พฤศจิกายน 2007, 22:35:20 »

น่าจะ บวกเป็นเท่าๆทั้งแกน x และ y ไปเรื่อยๆ แล้วพอถึงจุดที่ต้องการ ก็ให้ คงที่ array ตัวใดตัวหนึ่งอะครับ  :Smiley
มาแบบมั่วๆ  Embarrassed
บันทึกการเข้า

sisi
สมุนแก๊งเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 917



ดูรายละเอียด
« ตอบ #7 เมื่อ: 15 พฤศจิกายน 2007, 22:39:19 »

น่าจะ บวกเป็นเท่าๆทั้งแกน x และ y ไปเรื่อยๆ แล้วพอถึงจุดที่ต้องการ ก็ให้ คงที่ array ตัวใดตัวหนึ่งอะครับ  :Smiley
มาแบบมั่วๆ  Embarrassed

แต่ปัญหามันอยู่ที่ว่า  ความจริงเราไม่รู้ไงครับว่า ไอ่จุดแดงนั่นมันอยู่ที่ไหนของตาราง
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 15 พฤศจิกายน 2007, 22:53:18 »

วิธี B มันทำให้ผมนึกถึงว่าลูกศรคือโงกุนครับ

คือยังไง คือมันเดินไปแล้วย้อนกลับไปจุดแนวต้นในแกนนั้นๆ ได้

ทางที่จะเดินแล้วโงกุนมองได้ทั่วพิภพ เอ้ย กระดาน
คือการเดินแนวทะแยงไปเลย แล้ว... อธิบายยาก เลยทำภาพประกอบมาคร่าวๆ



คือมันไปเริ่มที่จุด 1
แล้วไล่ทีละช่องตรวจลงมาจนถึงจุด 2
แล้วถ้าไม่เจอ ก็เดินย้านกลับไปจุด1
แล้วเดินไล่ตรวจทีละช่องไปจนถึงจุด 3
ถ้าไม่เจอก็เริ่มต่อจากจุด 4 เลย
แล้วก็ทำแบบนั้นไปเรื่อยๆ จนเจอ

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

บันทึกการเข้า

ColdMoney
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 200
ออฟไลน์ ออฟไลน์

กระทู้: 12,622



ดูรายละเอียด เว็บไซต์
« ตอบ #9 เมื่อ: 16 พฤศจิกายน 2007, 00:08:07 »

น่าจะ บวกเป็นเท่าๆทั้งแกน x และ y ไปเรื่อยๆ แล้วพอถึงจุดที่ต้องการ ก็ให้ คงที่ array ตัวใดตัวหนึ่งอะครับ  :Smiley
มาแบบมั่วๆ  Embarrassed

แต่ปัญหามันอยู่ที่ว่า  ความจริงเราไม่รู้ไงครับว่า ไอ่จุดแดงนั่นมันอยู่ที่ไหนของตาราง

ถ้าเลียนแบบมาจาก dragon บอลคุณก็ต้องมี radar ด้วยนะครับ  Cheesy Cheesy

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


บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #10 เมื่อ: 16 พฤศจิกายน 2007, 01:51:27 »

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

ถ้าเป็นแบบนั้น สงสัยจะเป็นการเขียน AI แทนแล้วครับ  Cheesy
บันทึกการเข้า

payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #11 เมื่อ: 16 พฤศจิกายน 2007, 08:38:23 »


เอ่ .. คุ้นๆนะเนี่ยะ ..

ถ้าไม่รู้จุดขุมทรัพย์ (ไม่มีเงื่อนไขเลย) และไม่รู้จุดเริ่มต้น
ก็ต้องใช้วิธี random ครับ เก็บค่าที่ตรวจแล้ว ถ้าไม่เจอก็ไปเช็คจุดต่อไป ..
ซึ่งความเป็นไปได้ของจำนวนครั้งในการค้นหา = 1 ถึง WxH ครั้ง ครับ (อันนี้เรื่อง probability แล้วล่ะ)

แต่ที่เคยเจอ ก็จะเป็น algorithm ในการหาทางออกจากเขาวงกตซึ่งเส้นทางการเดินจะมีเงื่อนไข ..
มี algorithm หลายแบบมาก (ยากๆทั้งนั้นเลย) ...  Tongue

บันทึกการเข้า

chuanguru
ก๊วนเสียว
*

พลังน้ำใจ: 10
ออฟไลน์ ออฟไลน์

กระทู้: 337



ดูรายละเอียด
« ตอบ #12 เมื่อ: 16 พฤศจิกายน 2007, 09:30:29 »

แล้วแบบ B จะได้ผลลัพธ์ไวกว่าแบบ A เหรอครับ ถ้าคุณ EThaiZone อธิบายคือ มันต้องเดินย้อนกลับไปจุดเดิมอีกอ่ะครับผมว่าจะเสียเวลามากกว่าแบบเดินไปทางเดียว งง เหมือนกัน ที่ผมคิดได้คือ ผมคิดว่าให้มีโงกุนและผองเพื่อนจำนวนพันคนวิ่งไปทางเดียว(แกน x หรือ y ก็แล้วแต่) แล้วจะพบขุมทรัพย์เร็วที่สุดครับ (โจทย์ไม่ได้บอกอะไรมากมายอ่ะ อิอิ)  Cry
ดังรูป


ให้เขียนเป็นโปรแกรมเหรอครับ ผมเขียนไม่เป็นหรอก แหะๆๆ
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #13 เมื่อ: 16 พฤศจิกายน 2007, 10:10:25 »

วิธี B ไม่ใช่การเดินย้อนกลับครับ

แต่เป็นการกลับไปยังจุดเริ่มของระนาบนั้นๆ

ในจุด 1 ก็คือ x=1 y=-1
แต่พอจุด 4 จะเป็น x=2 y=-2

คือมันคำนวณได้อยู่แล้วว่า x+1 ส่วนy-1 ไล่ทุกระนาบแล้วทะแยงไป

มันก็เหมือนวิธี A แต่อาศัยว่าต้องกลับไปตั้งต้น ณ ระนาบนั้นๆ
ถ้าไม่มีก็ขึ้นระนาบใหม่  Tongue

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

paradox_073
สมุนแก๊งเสียว
*

พลังน้ำใจ: 30
ออฟไลน์ ออฟไลน์

กระทู้: 720



ดูรายละเอียด
« ตอบ #14 เมื่อ: 16 พฤศจิกายน 2007, 13:51:30 »

แล้วแบบ B จะได้ผลลัพธ์ไวกว่าแบบ A เหรอครับ ถ้าคุณ EThaiZone อธิบายคือ มันต้องเดินย้อนกลับไปจุดเดิมอีกอ่ะครับผมว่าจะเสียเวลามากกว่าแบบเดินไปทางเดียว งง เหมือนกัน ที่ผมคิดได้คือ ผมคิดว่าให้มีโงกุนและผองเพื่อนจำนวนพันคนวิ่งไปทางเดียว(แกน x หรือ y ก็แล้วแต่) แล้วจะพบขุมทรัพย์เร็วที่สุดครับ (โจทย์ไม่ได้บอกอะไรมากมายอ่ะ อิอิ)  Cry
ดังรูป


ให้เขียนเป็นโปรแกรมเหรอครับ ผมเขียนไม่เป็นหรอก แหะๆๆ



ตั้งใจทำจิงๆ  Grin
บันทึกการเข้า

icez
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 296
ออฟไลน์ ออฟไลน์

กระทู้: 2,886



ดูรายละเอียด
« ตอบ #15 เมื่อ: 16 พฤศจิกายน 2007, 14:14:31 »


จากรูปนี่แสดงว่ารู้ตำแหน่งอยู่แล้วนี่ครับว่าไอ้ลูกบอลนั่นอยู่ตรงไหนบ้าง
ทีนี้ กรณีรู้ตำแหน่งต้นทาง และปลายทางแล้ว และต้องการเดินให้ "สั้นที่สุด"
ใช้ pathfinding algorithm ครับ ค้นหาใน google ได้เลย มีทุกภาษา
แม้กระทั่ง php ที่ไม่รู้ใช้ทำไรก็ยังมีได้

ไปลอกๆ เอาจาก บอทเกมไหนก็ได้ฮะ บอทพวกนี้มีทั้งนั้นแหละ pathfinding algorithm น่ะ
ส่วนกรณีที่ไม่รู้เลย ว่าลูกบอลอยู่ตรงไหน วิธีที่เร็วที่สุดจะเป็นการเดินไปเรื่อยๆ ครับ
เพราะไม่สามารถ random ได้
บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
หน้า: [1]   ขึ้นบน
พิมพ์