คำถามติดแท็ก algorithm

อัลกอริทึมเป็นลำดับขั้นตอนที่กำหนดไว้อย่างดีซึ่งกำหนดวิธีแก้ปัญหาแบบนามธรรมให้กับปัญหา ใช้แท็กนี้เมื่อปัญหาของคุณเกี่ยวข้องกับการออกแบบอัลกอริทึม

3
วิธีที่เร็วที่สุดในการค้นหาผลิตภัณฑ์ขั้นต่ำขององค์ประกอบ 2 แถวที่มีองค์ประกอบมากกว่า 200,000 รายการ
ฉันมีอาเรa[n]ย์ หมายเลขnถูกป้อนโดยเรา ฉันต้องการค้นหาผลิตภัณฑ์ขั้นต่ำa[i]และa[j]ถ้า: 1) abs(i - j) > k 2) a[i] * a[j]ย่อเล็กสุด นี่คือทางออกของฉัน (ไร้เดียงสามาก): #include <iostream> using namespace std; #define ll long long int main() { ll n,k; cin >> n >> k; ll a[n]; for(ll i=0;i<n;i++) cin >> a[i]; ll mn; bool first = true; for(ll i=0;i<n;i++) { …

2
ปัญหาความพึงพอใจของข้อ จำกัด หายไปหนึ่งข้อ จำกัด
ฉันเป็นครูสอนพิเศษในห้องปฏิบัติการที่มหาวิทยาลัยตามความเห็นของนักเรียนปีที่แล้วเราต้องการเจ้านายของฉันและฉันเพื่อจัดการกับพวกเขา เจ้านายของฉันเลือกที่จะเขียนสคริปต์ C และเลือก python (python-constraint) เพื่อพยายามแก้ไขปัญหาของเรา ข้อมูล มี 6 ช่วงเวลา มี 4 บทบาท มี 6 วิธีปฏิบัติ มีนักเรียน 32 คน มีนักเรียน 4 คนต่อทีม ปัญหา: มอบหมายให้นักเรียนแต่ละคนมี 4 บทบาทใน 4 วิธีปฏิบัติใน 4 ช่วงที่แตกต่างกัน ข้อ จำกัด : นักเรียนควรมีบทบาทหนึ่งครั้ง นักเรียนควรฝึกปฏิบัติ 4 แบบจาก 6 ข้อ นักเรียนควรทำการฝึกเพียงครั้งเดียวต่อการเรียนหนึ่งครั้ง นักเรียนควรพบคู่ครองเดียวกันเพียงครั้งเดียว เทมเพลต: นี่คือเทมเพลตที่ฉันรู้สึกกับนักเรียนซึ่งแต่ละทีมประกอบด้วยนักเรียน 4 คนตำแหน่ง [0, 1, 2 หรือ …

3
วิธีค้นหาจำนวนการเคลื่อนไหวขั้นต่ำเพื่อย้ายรายการไปยังตำแหน่งในกองซ้อน?
เมื่อกำหนดชุดของสแต็ค NXP โดยที่ N เป็นจำนวนสแต็คและ P เป็นความสามารถของสแต็คฉันจะคำนวณจำนวนสว็อปขั้นต่ำที่จำเป็นในการย้ายจากโหนดบางจุดในตำแหน่ง A ไปยังตำแหน่ง A ได้อย่างไร ฉันออกแบบเกมและเป้าหมายสุดท้ายคือเรียงลำดับสแต็คทั้งหมดเพื่อให้มีสีเดียวกัน # Let "-" represent blank spaces, and assume the stacks are stacks = [ ['R', 'R', 'R', 'R'], ['Y', 'Y', 'Y', 'Y'], ['G', 'G', 'G', 'G'], ['-', '-', '-', 'B'], ['-', 'B', 'B', 'B'] ] ถ้าผมต้องการที่จะใส่ "B" ที่ดังกล่าวว่าstacks[1][1] …

7
การแบ่งองค์ประกอบของรายการอย่างยุติธรรม
เมื่อได้รับรายชื่อการจัดอันดับผู้เล่นฉันจำเป็นต้องแบ่งผู้เล่น (เช่นการจัดอันดับ) ออกเป็นสองกลุ่มอย่างยุติธรรมที่สุด เป้าหมายคือเพื่อลดความแตกต่างระหว่างการจัดอันดับสะสมของทีม ไม่มีข้อ จำกัด เกี่ยวกับวิธีที่ฉันสามารถแยกผู้เล่นออกเป็นทีม (ทีมหนึ่งสามารถมีผู้เล่น 2 คนและทีมอื่นสามารถมีผู้เล่น 10 คน) ตัวอย่างเช่น: [5, 6, 2, 10, 2, 3, 4]ควรกลับมา([6, 5, 3, 2], [10, 4, 2]) ฉันต้องการทราบอัลกอริทึมในการแก้ปัญหานี้ โปรดทราบว่าฉันกำลังเรียนหลักสูตรการเขียนโปรแกรมเบื้องต้นออนไลน์ดังนั้นอัลกอริธึมที่เรียบง่ายจึงน่าชื่นชม ฉันใช้รหัสต่อไปนี้ แต่ด้วยเหตุผลบางอย่างตัวตรวจสอบรหัสออนไลน์บอกว่าไม่ถูกต้อง def partition(ratings): set1 = [] set2 =[] sum_1 = 0 sum_2 = 0 for n in sorted(ratings, reverse=True): if sum_1 …
12 python  algorithm  list 

4
มีวิธีที่มีประสิทธิภาพในการสร้างจำนวนเต็มสุ่ม N ในช่วงที่มีผลรวมหรือค่าเฉลี่ยที่กำหนด?
โปรดปรานหมดอายุใน 8 ชั่วโมง คำตอบสำหรับคำถามนี้มีสิทธิ์ได้รับค่าหัว+200ชื่อเสียง Peter O.กำลังมองหาคำตอบที่ยอมรับได้ : เพื่อสรุป: อย่างใดอย่างหนึ่ง (1) หาอัลกอริทึมที่มีประสิทธิภาพมากกว่าที่ใช้ในรหัสหรือ (2) ระบุสูตรสำหรับจำนวนที่ถูกต้อง ชุดค่าผสมและวิธี "ยกเลิกการจัดอันดับ" หมายเลขชุดค่าผสม มีวิธีที่มีประสิทธิภาพในการสร้างการรวมกันแบบสุ่มของจำนวนเต็ม N เช่นนั้น - จำนวนเต็มแต่ละค่าอยู่ในช่วง [ min, max], จำนวนเต็มมียอดรวมของsum, จำนวนเต็มสามารถปรากฏในลำดับใดก็ได้ (เช่นลำดับแบบสุ่ม) และ ชุดค่าผสมจะถูกสุ่มเลือกจากชุดค่าผสมทั้งหมดที่ตรงตามข้อกำหนดอื่น ๆ มีอัลกอริทึมที่คล้ายกันสำหรับชุดค่าผสมแบบสุ่มซึ่งจำนวนเต็มจะต้องปรากฏในลำดับที่เรียงตามค่าของพวกเขา (แทนที่จะเรียงตามลำดับใด ๆ ) หรือไม่? (การเลือกชุดค่าผสมที่เหมาะสมกับค่าเฉลี่ยของmeanเป็นกรณีพิเศษถ้าsum = N * meanปัญหานี้เทียบเท่ากับการสร้างพาร์ติชันแบบสุ่มที่สม่ำเสมอของsumเป็นส่วน N ซึ่งแต่ละส่วนในช่วง [ min, max] และปรากฏในลำดับใด ๆ หรือเรียงตามลำดับของพวกเขา ค่าตาม แต่กรณี) …

3
ให้สองลำดับค้นหาการทับซ้อนสูงสุดระหว่างสิ้นสุดของหนึ่งและจุดเริ่มต้นของอื่น ๆ
ฉันต้องการค้นหารหัส (หลอก) ที่มีประสิทธิภาพเพื่อแก้ไขปัญหาต่อไปนี้: ได้รับลำดับสองของ (ไม่จำเป็นต้องแตกต่างกัน) จำนวนเต็ม(a[1], a[2], ..., a[n])และ(b[1], b[2], ..., b[n])ค้นหาสูงสุดdดังกล่าวว่าa[n-d+1] == b[1], a[n-d+2] == b[2]... a[n] == b[d]และ นี่ไม่ใช่การบ้านจริง ๆ แล้วฉันคิดเรื่องนี้เมื่อพยายามที่จะทำสัญญากับเทนเซอร์สองมิติในหลาย ๆ มิติให้มากที่สุด ฉันสงสัยว่าอัลกอริทึมที่มีประสิทธิภาพที่มีอยู่ (อาจจะO(n)?) O(n^2)แต่ฉันไม่สามารถเกิดขึ้นกับบางสิ่งบางอย่างที่ไม่ได้เป็น O(n^2)วิธีการที่จะเป็นห่วงที่เห็นได้ชัดในแล้วห่วงด้านในรายการที่จะต้องตรวจสอบสภาพจนตีสูงสุดd dแต่ฉันสงสัยว่าสิ่งที่ดีกว่านี้เป็นไปได้

1
อัลกอริทึมการตัดสตริงที่มีประสิทธิภาพโดยลบคำนำหน้าและคำต่อท้ายเท่ากันตามลำดับ
การ จำกัด เวลาต่อการทดสอบ: 5 วินาทีการ จำกัด หน่วยความจำต่อการทดสอบ: 512 เมกะไบต์ คุณได้รับสตริงที่มีsความยาวn( n≤ 5000) คุณสามารถเลือกคำนำหน้าใด ๆ ที่เหมาะสมของสายนี้ที่ยังต่อท้ายและลบคำนำหน้าเลือกหรือคำต่อท้ายที่สอดคล้องกัน จากนั้นคุณสามารถใช้การดำเนินการแบบอะนาล็อกกับสตริงผลลัพธ์และอื่น ๆ ความยาวต่ำสุดของสตริงสุดท้ายคืออะไรซึ่งสามารถทำได้หลังจากใช้ลำดับที่เหมาะสมของการดำเนินการดังกล่าว อินพุต บรรทัดแรกของการทดสอบแต่ละครั้งประกอบด้วยสตริงsที่ประกอบด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ๆ เอาต์พุต เอาต์พุตจำนวนเต็มเดียว - ความยาวต่ำสุดของสตริงสุดท้ายที่สามารถทำได้หลังจากใช้ลำดับที่เหมาะสมของการดำเนินการดังกล่าว ตัวอย่าง +-------+--------+----------------------------------+ | Input | Output | Explanation | +-------+--------+----------------------------------+ | caaca | 2 | caaca → ca|aca → aca → ac|a → ac | …

1
ImmutableSortedDictionary ช่วงแจงนับโดยคีย์
ผมอ่านเกี่ยวกับ C # 's ImmutableSortedDictionaryในSystem.Collections.Immutableและความคิดเกี่ยวกับวิธีการที่จะใช้มันในโปรแกรมของฉัน ฉันค่อนข้างชอบ C ++ lower_boundและupper_bound(ดูที่นี่ ) และฉันค่อนข้างคาดหวังที่จะเห็นบางสิ่งบางอย่างสำหรับการค้นหาช่วง อย่างไรก็ตามวิธีการที่คล้ายกันดูเหมือนจะแปลกขาดจากเอกสาร ฉันพลาดอะไรไปรึเปล่า? หรือว่า MS จัดเตรียมพจนานุกรมเรียงอย่างแท้จริงโดยไม่ต้องเข้าถึงช่วงเรียงอย่างมีประสิทธิภาพ? ดูเหมือนจะไม่เหมือนสิ่งที่คน ๆ หนึ่งทำได้บนIEnumerableปุ่มเหมือนกับวิธีการขยายดังนั้นฉันค่อนข้างงุนงงฉันไม่เห็นบางสิ่งที่ได้รับจากคอลเลกชันโดยตรง

4
การค้นหาละแวกใกล้เคียง (cliques) ในข้อมูลถนน (กราฟ)
ฉันกำลังมองหาวิธีกำหนดย่านที่คุ้นเคยในเมืองโดยอัตโนมัติเป็นรูปหลายเหลี่ยมบนกราฟ คำจำกัดความของพื้นที่ใกล้เคียงของฉันมีสองส่วน: บล็อก : พื้นที่ที่รวมระหว่างถนนจำนวนหนึ่งซึ่งจำนวนถนน (ขอบ) และทางแยก (โหนด) เป็นอย่างน้อยสาม (สามเหลี่ยม) พื้นที่ใกล้เคียง : สำหรับบล็อกที่กำหนดบล็อกทั้งหมดที่อยู่ติดกับบล็อกนั้นและบล็อกนั้นโดยตรง ดูภาพประกอบนี้สำหรับตัวอย่าง: เช่นB4เป็นบล็อกที่กำหนดโดย 7 โหนดและ 6 ขอบเชื่อมต่อพวกเขา จากตัวอย่างส่วนใหญ่ที่นี่บล็อกอื่น ๆ จะถูกกำหนดโดย 4 โหนดและ 4 ขอบเชื่อมต่อพวกเขา นอกจากนี้เขตของB1รวมถึงB2 (และในทางกลับกัน) ในขณะที่B2ยังรวมถึงB3 ฉันใช้osmnxเพื่อรับข้อมูลสตรีทจาก OSM ใช้ osmnx และ networkx ฉันจะสำรวจกราฟเพื่อค้นหาโหนดและขอบที่กำหนดแต่ละบล็อกได้อย่างไร สำหรับแต่ละบล็อกฉันจะค้นหาบล็อกที่อยู่ติดกันได้อย่างไร ฉันกำลังทำงานกับชิ้นส่วนของรหัสที่ใช้กราฟและพิกัด (ละติจูด, ลองจิจูด) เป็นอินพุตระบุบล็อกที่เกี่ยวข้องและส่งกลับรูปหลายเหลี่ยมสำหรับบล็อกนั้นและพื้นที่ใกล้เคียงตามที่กำหนดไว้ด้านบน นี่คือรหัสที่ใช้ทำแผนที่: import osmnx as ox import networkx as nx …

2
จัดเรียงอัลกอริทึมสำหรับ Excel / SharedStrings
ใน Excel พวกเขา 'บีบอัด' สตริงการแมปเป็นตัวเลข (แม้ว่าฉันไม่แน่ใจว่าคำว่าการบีบอัดถูกต้องในกรณีนี้) นี่คือตัวอย่างที่แสดงด้านล่าง: ในขณะที่สิ่งนี้ช่วยลดขนาดไฟล์และรอยเท้าหน่วยความจำโดยรวมแล้ว Excel จะเรียงลำดับอย่างไรในเขตข้อมูลสตริง ทุกสตริงเดียวจะต้องผ่านการค้นหาการแมป: และถ้าเป็นเช่นนั้นจะไม่เพิ่มค่าใช้จ่าย / ชะลอการทำเรียงลำดับในเขตข้อมูลสตริง (ถ้ามีค่า 1M, การค้นหาคีย์ 1M จะไม่ จิ๊บจ๊อย) คำถามสองข้อเกี่ยวกับเรื่องนี้: มีการใช้สตริงที่ใช้ร่วมกันภายในแอปพลิเคชัน Excel หรือเมื่อบันทึกข้อมูลเท่านั้น อะไรจะเป็นตัวอย่างอัลกอริธึมที่จะเรียงลำดับบนสนาม ภาษาใดก็ได้ (c, c #, c ++, python)

1
shift_right () ตั้งใจจะนำไปใช้ใน C ++ 20 อย่างไร
ใน C ++ 20 <algorithm>กำไรส่วนหัวทั้งสองขั้นตอนวิธีการใหม่และshift_left() shift_right()ทั้งสองคนยอมรับ LegacyForwardIterator ใด ๆ สำหรับshift_left()มันระบุไว้ว่า "การเคลื่อนไหวจะดำเนินการเพื่อเพิ่มการiเริ่มต้นจาก​0"; สำหรับshift_right()มันมีการระบุว่า "ถ้าForwardItตรงตามความต้องการ LegacyBidirectionalIterator แล้วย้ายจะดำเนินการในลำดับที่ลดลงของการiเริ่มต้นจากlast - first - n - 1" ฉันคิดว่าวิธีง่าย ๆ ที่จะใช้shift_left(): template <typename ForwardIt> constexpr inline ForwardIt shift_left(ForwardIt first, ForwardIt last, typename std::iterator_traits<ForwardIt>::difference_type n) { if (n <= 0) return last; ForwardIt it = first; for (; …

4
มีวิธีใดที่เร็วกว่าในการตรวจสอบว่ารายการในรายการเทียบเท่าหรือไม่
นี่ฉันมีจำนวนเต็ม1:7สำหรับสี่พาร์ทิชันที่แตกต่างกันกล่าวคือ {1}, {2,3,4}, {5,6} และ {7} list(1,c(2,3,4),c(5,6),7)และพาร์ทิชันเหล่านั้นจะถูกเขียนในรายการคือ ฉันถือว่าพาร์ติชั่นเป็นชุด, ดังนั้นการเปลี่ยนแปลงองค์ประกอบที่แตกต่างกันภายในพาร์ติชั่นหนึ่งควรถูกจดจำเป็นพาร์ติชั่นเดียวกัน. ตัวอย่างเช่นlist(1,c(2,3,4),c(5,6),7)และlist(7,1,c(2,3,4),c(6,5))เทียบเท่า โปรดทราบว่าไม่มีการทำซ้ำสำหรับองค์ประกอบในรายการเช่นไม่ใช่list(c(1,2),c(2,1),c(1,2))เนื่องจากปัญหานี้กำลังพูดถึงพาร์ติชันพิเศษเหนือทั้งชุด ฉันแสดงรายการการเรียงลำดับที่แตกต่างกันบางรายการลงในรายการ lstด้านล่าง lst <- list(list(1,c(2,3,4),c(5,6),7), list(c(2,3,4),1,7,c(5,6)), list(1,c(2,3,4),7,c(6,5)), list(7,1,c(3,2,4),c(5,6))) และสิ่งที่ฉันต้องการทำคือการตรวจสอบว่าพีชคณิตทั้งหมดมีความเท่าเทียมกัน TRUEถ้าใช่แล้วเราจะได้รับผล สิ่งที่ฉันทำจนถึงตอนนี้คือการจัดเรียงองค์ประกอบภายในแต่ละพาร์ติชันและใช้setdiff()กับinterset()และunion()ตัดสินมัน (ดูรหัสของฉันด้านล่าง) s <- Map(function(v) Map(sort,v),lst) equivalent <- length(setdiff(Reduce(union,s),Reduce(intersect,s),))==0 อย่างไรก็ตามฉันคิดว่าวิธีนี้จะช้าเมื่อใดก็ตามที่ขนาดพาร์ติชันเพิ่มขึ้น มีวิธีเร็วกว่าที่จะทำหรือไม่ ขอบคุณล่วงหน้า! กรณีทดสอบบางอย่าง (ข้อมูลขนาดเล็ก) # should return `TRUE` lst1 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,4),c(6,5))) # should return `TRUE` lst2 <- …

8
ค้นหาปีด้วยจำนวนประชากรสูงสุด (วิธีที่มีประสิทธิภาพที่สุด)
รับสองอาร์เรย์ $birthsมีรายการปีเกิดแสดงเมื่อมีคนเกิดและ$deathsมีรายการปีแห่งความตายที่ระบุเมื่อมีคนตายเราจะหาปีที่ประชากรสูงสุดได้อย่างไร ตัวอย่างเช่นกำหนดอาร์เรย์ต่อไปนี้: $births = [1984, 1981, 1984, 1991, 1996]; $deaths = [1991, 1984]; ปีที่ประชากรสูงสุดควรเป็น1996เพราะ3ประชาชนยังมีชีวิตอยู่ในช่วงปีนั้นซึ่งเป็นประชากรที่สูงที่สุดนับจากทุกปี นี่คือคณิตศาสตร์ที่ใช้อยู่ในนั้น: | เกิด | ความตาย | ประชากร | ------- | ------- | ------------ | | 1981 | | 1 | | 2527 | | 2 | | 2527 | 2527 | 2 | | 2534 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.