1. Trang chủ
  2. » Kỹ Năng Mềm

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

3 117 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 3
Dung lượng 180,69 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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

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.VNgiới thiệu nhé!

1 Sử dụng Hashmap

Hoàn toàn đúng đắ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ả 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:

Trang 2

        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:

        counts[potential_mode] += 1

        if counts[potential_mode] > max_count:

        mode = potential_mode

        max_count = counts[potential_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

Trang 3

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(n-1) + fib(n-2)

 

-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

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

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w