3 cách để nâng cao khả năng giải quyết trong phỏng vấn hàm tin học

3 115 0
3 cách để nâng cao khả năng giải quyết trong phỏng vấn hàm tin học

Đang tải... (xem toàn văn)

Thông tin tài liệu

3 Cách để nâng cao khả năng giải quyết trong phỏng vấn hàm tin học 3cachnangcaokhananggiaiquyettrongphongvanhamtinhoc Bạn đây rồi. Thật an tâm. Và kiệt sức. Cuối cùng bạn đang tiến gần đến việc giải quyết những câu hỏi về hàm tin học rắc rối mà nhà tuyển dụng yêu cầu rồi. Có lẽ bạn đã viết chúng lên bảng, từng hàng một. Và bạn đã làm tốt Bạn chỉ có 20p để thể hiện và nhà tuyển dụng của bạn cần phải ấn ượng. Đúng chứ? “Nó sẽ ấn tượng, nhưng làm thế nào để khiến nó càng ấn tượng hơn?” Trái tim bạn chùng xuống. Bạn nghĩ bạn đã làm tốt với phần thiết kế thuật toán rắc rối Bạn cố để nghĩ nhiều cách giải quyết hơn cho vấn đề này, nhưng tất cả những gì bạn có thể nghĩ là một cách tiếp cận mà bạn vừa phát hiện ra. Điều này xảy ra với nhiều người. Và nó không phải bởi vì họ ngu ngốc. Đó là bởi vì mọi ngưởi không có phương pháp để cải thiện năng lực làm việc với những thuật toán. Nhưng sự thật thì, có rất nhiều cách. Lần tới nếu bạn bối rối, hãy thử áp dụng những cách mà VIECOI.VN giới thiệu nhé 1. Sử dụng Hashmap Hoàn toàn đúng đắn. Hash mapsassociative arraysdictionaries (Chúng có nhiều tên gọi, tùy vào ngôn ngữ chương trình bạn sử dụng) có khả năng thần kỳ trong việc giảm thời gian làm việc với thuật toán. Ví dụ, câu hỏi là hãy tìm ra con số lặp lại nhiều nhất trong dãy số sau. Đầu tiên bạn nghĩ có lẽ sẽ nhảy vào một vài vòng lặp. Với mỗi con số, đếm và xem số nào lớn nhất. Làm sao chúng ta có thể đến từng số? Vòng lặp chạy quanh dãy, đếm xem bao nhiêu lần nó xuất hiện Chúng ta đang nói đến hai vòng lặp lồng vào nhau. Giả sử: def get_mode(nums): max_count = 0 mode = null for potential_mode in nums: count = 0 for number in our_array: count += 1 if count >= max_count: mode = potential_mode max_count = count return mode Bây giờ, chúng ta đang làm một số móc vào cả hàng và chúng móc vào nhau nhưng chúng ta có thể làm tốt hơn. Ở ký hiệu O lớn, tổng cộng là O(n2) lần Nếu chúng ta có thể lưu những con số này vào Hashmap (sắp xếp các con số cho chúng ta), bạn có thể giải quyết vấn đề chỉ trong một nốt nhạc với hàng mã (O(n) time) def get_mode(nums): max_count = 0 mode = null counts = new HashMap, starting each value at 0 for potential_mode in nums: countspotential_mode += 1 if countspotential_mode > max_count: mode = potential_mode max_count = countspotential_mode return mode Quá nhanh 2. Sử dụng thao tác Bit Điều này thật sự sẽ đặt bạn ra xa những tài liệu cao ngất. Nó không giải quyết tất cả các vấn đề, nhưng nếu bạn vẫn giữ tập tài liệu sau lưng và sử dụng đúng lúc, bạn sẽ như một ngôi sao nhạc rock. Đây là một ví dụ: Giả sư chúng ta đã có một dãy số, những con số xuất hiện 2 lần, hy vọng có 1 con số chỉ xuất hiện 1 lần. Chúng ta đang viết 1 hàm để tìm ra một số và không lặp lại. Theo bản năng, bạn có lẽ sẽ sử dụng hashmap, bởi vì chúng ta vừa nói về nó. Bản năng tốt nên có Và nó chỉ hiệu quả với cái này. Chúng có thể tạo ra một bản đồ đếm tương tư, và sử dụng nó để tìm con số nào kết thúc với số lần đếm là 1 lần. Nhưng có một cách tốt hơn. Nếu bạn thành thạo thao tác bit, bạn sẽ biết XOR. Một điều đặc biệt về XOR là nếu bạn XOR một số, thao tác bit sẽ hủy bỏ cho đến 0. Với vấn đề này, nếu chúng ta XOR mọi số trong dãy với nhau, XOR sẽ để lại 1 số mà không bị hủy: def find_unrepeated(nums): unrepeated = 0 for num in nums: unrepeated = unrepeated XOR num return unrepeated 3. Đi từ dưới lên Viết hàm mà kết quả của “nth” số Fibonacci, đưa ra một số n. Đây là một bài kinh điển, và nó thích hợp để được quay trở lại: def fib(n): if n is 0 or 1: return 1 return fib(n1) + fib(n2) Nhưng câu trả lời đệ quy đơn giản không chỉ có một Nghĩ kĩ càng hơn về hàm này làm cái gì. Giả sử n là 5. Để có đáp án, nó yêu cầu một cách đệ quy fib(4) and fib(3). Bây giờ, gọi fib(4) để làm gì? Gọi fib(3) và fib(2). Nhưng chúng ta chỉ nói rằng chúng ta gọi fib(3) Hàm đệ quy đáng yêu này lặp lại quá nhiều việc. Với tổng thời gian tiêu tốn hóa ra là O(2n). Quá tệ cách tệ hơn O(n2). Thay vì đi từ n một cách đề quy đến 1, hãy đi từ dưới lên, từ 1 đến n. Nó sẽ cho chúng ta qua bỏ sự quay lại: def fib(n): previous = 0 previous_previous = 1 for i in the range 1 to n: current = previous + previous_previous previous_previous = previous previous = current return current Đoạn mã dài hơn, nhưng nó hiệu quả hơn nhiều Chỉ còn O(n) lần. Khi chúng ta thêm thuật toán đệ quy mở, chúng ta tiết kiệm thời gian. Tất cả các yêu cầu đệ quy sẽ tạo nên số lượng lớn yêu cầu, nó nằm trong bộ nhớ đếm giá trị thời gian. Hàm đệ quy của chúng ta có giá trị thời gian O(n), nhưng sự lặp đi lặp lại này chỉ tốn O(1) thời gian. Lần tới, nhà tuyển dụng yêu cầu bạn nâng cao hiệu quả trong cách giải quyết vấn đề của bạn, cố gắng lướt qua các chiến lượt và thăm dò nếu họ cần giúp đỡ. Với đủ kinh nghiệm, bạn có thể sẽ nhảy vào giải quyết vấn đề, bỏ qua giải pháp ngây thơ. Và điều đó quá tuyệt vời. Điều đó thể hiện rằng bạn không chỉ là một ứng viên giỏi mà còn có nghĩa bạn sẽ trở thành một nhân viên giỏi. Chia sẻ và đóng góp ý kiến cùng VIECOI.VN nhé Tìm hiểu 10 trang web hướng dẫn viết code tốt nhất. Bài viết được dịch bởi Nhật Hạ từ www.themuse.com

3 Cách để nâng cao khả giải vấn hàm tin học Bạn Thật an tâm Và kiệt sức Cuối bạn tiến gần đến việc giải câu hỏi hàm tin học rắc rối mà nhà tuyển dụng yêu cầu Có lẽ bạn viết chúng lên bảng, hàng Và bạn làm tốt! Bạn có 20p để thể nhà tuyển dụng bạn cần phải ấn ượng Đúng chứ? “Nó ấn tượng, làm để khiến ấn tượng hơn?” Trái tim bạn chùng xuống Bạn nghĩ bạn làm tốt với phần thiết kế thuật toán rắc rối! Bạn cố để nghĩ nhiều cách giải cho vấn đề này, tất bạn nghĩ cách tiếp cận mà bạn vừa phát Điều xảy với nhiều người Và khơng phải họ ngu ngốc Đó ngưởi khơng có phương pháp để cải thiện lực làm việc với thuật toán Nhưng thật thì, có nhiều cách Lần tới bạn bối rối, thử áp dụng cách mà VIECOI.VNgiới thiệu nhé! Sử dụng Hashmap Hoàn toàn đắn Hash maps/associative arrays/dictionaries (Chúng có nhiều tên gọi, tùy vào ngơn ngữ chương trình bạn sử dụng) có khả thần kỳ việc giảm thời gian làm việc với thuật tốn Ví dụ, câu hỏi tìm số lặp lại nhiều dãy số sau Đầu tiên bạn nghĩ có lẽ nhảy vào vài vòng lặp Với số, đếm xem số lớn Làm đến số? Vòng lặp chạy quanh dãy, đếm xem lần xuất hiện! Chúng ta nói đến hai vòng lặp lồng vào Giả sử: -def get_mode(nums): max_count = mode = null for potential_mode in nums: count = for number in our_array: count += if count >= max_count: mode = potential_mode max_count = count return mode -Bây giờ, làm số móc vào hàng chúng móc vào nhau- làm tốt Ở ký hiệu O lớn, tổng cộng O(n2) lần Nếu lưu số vào Hashmap (sắp xếp số cho chúng ta), bạn giải vấn đề nốt nhạc với hàng mã (O(n) time!) def get_mode(nums): max_count = mode = null counts = new HashMap, starting each value at for potential_mode in nums: counts[potential_mode] += if counts[potential_mode] > max_count: mode = potential_mode max_count = counts[potential_mode] return mode -Quá nhanh! Sử dụng thao tác Bit Điều thật đặt bạn xa tài liệu cao ngất Nó khơng giải tất vấn đề, bạn giữ tập tài liệu sau lưng sử dụng lúc, bạn ngơi nhạc rock Đây ví dụ: Giả sư có dãy số, số xuất lần, hy vọng có số xuất lần Chúng ta viết hàm để tìm số khơng lặp lại Theo năng, bạn có lẽ sử dụng hashmap, vừa nói Bản tốt nên có! Và hiệu với Chúng tạo đồ đếm tương tư, sử dụng để tìm số kết thúc với số lần đếm lần Nhưng có cách tốt Nếu bạn thành thạo thao tác bit, bạn biết XOR Một điều đặc biệt XOR bạn XOR số, thao tác bit hủy bỏ Với vấn đề này, XOR số dãy với nhau, XOR để lại số mà không bị hủy: def find_unrepeated(nums): unrepeated = for num in nums: unrepeated = unrepeated XOR num return unrepeated - Đi từ lên Viết hàm mà kết “nth” số Fibonacci, đưa số n Đây kinh điển, thích hợp để quay trở lại: def fib(n): if n is or 1: return return fib(n-1) + fib(n-2) -Nhưng câu trả lời đệ quy đơn giản khơng có một! Nghĩ kĩ hàm làm Giả sử n Để có đáp án, yêu cầu cách đệ quy fib(4) and fib(3) Bây giờ, gọi fib(4) để làm gì? Gọi fib(3) fib(2) Nhưng nói gọi fib(3)! Hàm đệ quy đáng yêu lặp lại nhiều việc Với tổng thời gian tiêu tốn hóa O(2 n) Quá tệ- cách tệ O(n2) Thay từ n cách đề quy đến 1, từ lên, từ đến n Nó cho qua bỏ quay lại: def fib(n): previous = previous_previous = for i in the range to n: current = previous + previous_previous previous_previous = previous previous = current return current -Đoạn mã dài hơn, hiệu nhiều! Chỉ O(n) lần Khi thêm thuật toán đệ quy mở, tiết kiệm thời gian Tất yêu cầu đệ quy tạo nên số lượng lớn yêu cầu, nằm nhớ đếm giá trị thời gian Hàm đệ quy có giá trị thời gian O(n), lặp lặp lại tốn O(1) thời gian Lần tới, nhà tuyển dụng yêu cầu bạn nâng cao hiệu cách giải vấn đề bạn, cố gắng lướt qua chiến lượt thăm dò họ cần giúp đỡ Với đủ kinh nghiệm, bạn nhảy vào giải vấn đề, bỏ qua giải pháp ngây thơ Và điều tuyệt vời Điều thể bạn không ứng viên giỏi- mà có nghĩa bạn trở thành nhân viên giỏi Chia sẻ đóng góp ý kiến VIECOI.VN nhé! Tìm hiểu 10 trang web hướng dẫn viết code tốt Bài viết dịch Nhật Hạ từ www.themuse.com ... giản khơng có một! Nghĩ kĩ hàm làm Giả sử n Để có đáp án, yêu cầu cách đệ quy fib(4) and fib (3) Bây giờ, gọi fib(4) để làm gì? Gọi fib (3) fib(2) Nhưng nói gọi fib (3) ! Hàm đệ quy đáng yêu lặp lại... cầu, nằm nhớ đếm giá trị thời gian Hàm đệ quy có giá trị thời gian O(n), lặp lặp lại tốn O(1) thời gian Lần tới, nhà tuyển dụng yêu cầu bạn nâng cao hiệu cách giải vấn đề bạn, cố gắng lướt qua chiến... tài liệu cao ngất Nó khơng giải tất vấn đề, bạn giữ tập tài liệu sau lưng sử dụng lúc, bạn nhạc rock Đây ví dụ: Giả sư có dãy số, số xuất lần, hy vọng có số xuất lần Chúng ta viết hàm để tìm số

Ngày đăng: 29/12/2017, 09:04

Mục lục

  • 3 Cách để nâng cao khả năng giải quyết trong phỏng vấn hàm tin học

    • 1. Sử dụng Hashmap

    • 2. Sử dụng thao tác Bit

    • 3. Đi từ dưới lên

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan