Câu hỏi phỏng vấn thuật toán Python

Các thuật toán và cấu trúc dữ liệu là nền tảng của khoa học máy tính. Là nền tảng cho các ngôn ngữ lập trình, các nhà tuyển dụng công nghệ nhấn mạnh vào các thuật toán và cấu trúc dữ liệu trong các cuộc phỏng vấn.  

Show

Nếu bạn đang tìm kiếm sự trợ giúp về các câu hỏi phỏng vấn trong những lĩnh vực đó, bạn đã đến đúng nơi. Chúng tôi sẽ đề cập đến tất cả các câu hỏi phỏng vấn về cấu trúc dữ liệu và thuật toán mà bạn nên chuẩn bị cho năm 2022.  

Câu hỏi phỏng vấn cấu trúc dữ liệu cấp đầu vào

Cấu trúc dữ liệu là gì?

Cấu trúc dữ liệu là một định dạng để lưu trữ dữ liệu trên máy tính để có thể truy cập và sửa đổi dễ dàng.  

Các loại cấu trúc dữ liệu khác nhau là gì?

Các loại cấu trúc dữ liệu khác nhau là.  

  • Mảng. Một tập hợp các giá trị dữ liệu được lưu trữ tuần tự
  • ngăn xếp. Cấu trúc dữ liệu nhập sau xuất trước (LIFO) trong đó phần tử được đặt sau cùng được truy cập trước
  • hàng đợi. Cấu trúc dữ liệu nhập trước xuất trước.  
  • danh sách liên kết. Một tập hợp các giá trị dữ liệu được lưu trữ theo thứ tự tuyến tính và được kết nối với nhau
  • đồ thị. Một cấu trúc dữ liệu trong đó các giá trị dữ liệu được đặt trong các nút được kết nối bởi các cạnh
  • Cây. Tương tự như danh sách liên kết, nhưng với các giá trị dữ liệu được liên kết theo kiểu phân cấp
  • đống. Cấu trúc dữ liệu cây nhị phân trong đó các giá trị dữ liệu gốc có thể được so sánh với các giá trị dữ liệu con
  • bảng băm. Một bảng trong đó mỗi giá trị được gán một khóa và sau đó được lưu trữ, giúp việc truy cập các giá trị riêng lẻ trở nên dễ dàng.  

Lợi ích của việc học cấu trúc dữ liệu là gì?

Nghiên cứu cấu trúc dữ liệu là một cách để khai thác sức mạnh của dữ liệu. Nếu không có cấu trúc dữ liệu, bạn sẽ có một lượng lớn dữ liệu mà bạn không thể dễ dàng truy cập. Khi bạn sử dụng cấu trúc dữ liệu, bạn có thể truy xuất và thao tác dữ liệu để khám phá thông tin chi tiết.  

Các ứng dụng của cấu trúc dữ liệu là gì?

Cấu trúc dữ liệu có thể được sử dụng để.  

  • Thực hiện cấp phát bộ nhớ động
  • Bộ mô hình và các bộ sưu tập dữ liệu khác
  • Dễ dàng tìm kiếm thông qua các tập dữ liệu lớn
  • mạng lưới mô hình hóa
  • Giải bài toán ngắn nhất

Sự khác biệt giữa cấu trúc tệp và cấu trúc lưu trữ là gì?

Câu hỏi phỏng vấn thuật toán Python

Cấu trúc lưu trữ là cấu trúc dữ liệu trong bộ nhớ của máy tính. Một hệ thống tệp cũng là một đại diện của cấu trúc dữ liệu, nhưng trong bộ nhớ phụ của máy tính.  

Cấu trúc dữ liệu tuyến tính so với cấu trúc dữ liệu phi tuyến tính. Sự khác biệt là gì?

Cấu trúc dữ liệu tuyến tính lưu trữ dữ liệu theo trình tự tuyến tính. Bạn chỉ có thể duyệt qua cấu trúc dữ liệu theo trình tự tuyến tính đó. Mảng và ngăn xếp là ví dụ về cấu trúc dữ liệu tuyến tính.  

Cấu trúc dữ liệu phi tuyến tính sắp xếp dữ liệu theo cách không tuyến tính. Ví dụ, một biểu đồ có các nút được kết nối với nhau thông qua các cạnh. Mối quan hệ giữa các giá trị dữ liệu được xác định theo các nút được kết nối thông qua các cạnh chứ không phải theo cách sắp xếp tuần tự. Cây cũng là cấu trúc dữ liệu phi tuyến tính.  

Mảng là gì?

Câu hỏi phỏng vấn thuật toán Python

Mảng là một cấu trúc dữ liệu trong đó các giá trị dữ liệu được lưu trữ ở các vị trí liền kề nhau trong bộ nhớ. Mỗi phần tử được cung cấp một chỉ mục, đó là vị trí của nó trong chuỗi các giá trị dữ liệu.  

Làm cách nào bạn có thể lưu trữ các phần tử của mảng 2D trong bộ nhớ?

Có hai kỹ thuật được sử dụng để lưu trữ mảng 2D.  

  • Thứ tự hàng chính

Tất cả các hàng của mảng được lưu trữ liên tục trong kỹ thuật này. Bạn bắt đầu với hàng đầu tiên, sau đó chuyển sang hàng thứ hai, v.v., cho đến khi toàn bộ mảng được lưu trữ trong bộ nhớ.  

  • Thứ tự cột chính

Theo kỹ thuật này, các cột của mảng được lưu trữ liên tục thay vì các hàng. Bạn bắt đầu với cột đầu tiên và chuyển sang các cột tiếp theo một cách tuần tự.  

Danh sách liên kết là gì?

Danh sách được liên kết là một cấu trúc dữ liệu tuyến tính, nhưng với các giá trị dữ liệu không được lưu trữ trong các vị trí bộ nhớ liền kề. Vì vậy, để duyệt qua danh sách, mỗi phần tử của danh sách được kết nối với phần tử tiếp theo bằng một con trỏ.  

Giải thích mảng nhiều chiều

Mảng tiêu chuẩn chỉ có một chiều; . Nhưng hãy tưởng tượng rằng bạn muốn chuyển các phần tử ở định dạng bảng thành một mảng. Các bảng có hai chiều, vì vậy bạn sẽ cần một mảng hai chiều để mô tả nó.  

Mảng nào có nhiều hơn một chiều là mảng nhiều chiều. Mảng 2D là dạng cơ bản nhất của mảng nhiều chiều

Danh sách được liên kết được coi là cấu trúc dữ liệu tuyến tính hay phi tuyến tính?

Danh sách liên kết là cấu trúc dữ liệu tuyến tính.  

Bạn có thể sử dụng danh sách và mảng được liên kết như thế nào?

Danh sách được liên kết là một cấu trúc dữ liệu tuyến tính trong đó các giá trị dữ liệu không được lưu trữ trong các vị trí bộ nhớ liền kề. Các ứng dụng xem ảnh có thể sử dụng danh sách được liên kết để cho phép người dùng chuyển từ ảnh này sang ảnh khác theo trình tự thời gian. Những hình ảnh này không cần được lưu trữ ở các vị trí liền kề, nhưng mỗi hình ảnh cần trỏ đến hình ảnh tiếp theo để người dùng có thể cuộn qua album.  

Mảng là cấu trúc dữ liệu đơn giản lưu trữ các loại giá trị dữ liệu giống nhau ở các vị trí liền kề nhau. Hãy tưởng tượng bạn muốn chạy hàng ngày và lưu trữ quãng đường hàng ngày của mình trong một cấu trúc dữ liệu. Trong trường hợp đó, bạn có thể sử dụng một mảng để lưu trữ khoảng cách cho mỗi ngày và dễ dàng truy cập các mục trước đó.  

Danh sách được liên kết có bất kỳ lợi thế nào so với mảng không?

Có, danh sách được liên kết có một vài lợi thế so với mảng.  

  • Danh sách được liên kết cung cấp dung lượng lưu trữ động và có thể dễ dàng chứa các giá trị mới hơn. Mảng được khởi tạo với một kích thước cụ thể và kết quả là không thể thích ứng với các yêu cầu về bộ nhớ.  
  • Việc chèn hoặc xóa các phần tử trong danh sách liên kết sẽ dễ dàng hơn vì các phần tử không được lưu trữ ở các vị trí bộ nhớ liền kề.  

Làm thế nào để bạn tham chiếu tất cả các phần tử trong một mảng một chiều?

Một vòng lặp được lập chỉ mục có thể được sử dụng để tham chiếu tất cả các phần tử trong mảng một chiều. Vòng lặp sẽ bắt đầu tại vị trí mảng đầu tiên và lần lượt duyệt qua tất cả chúng. Giả sử mảng có n phần tử. Trong trường hợp đó, vòng lặp sẽ đi từ 0 đến n.  

Cấu trúc dữ liệu động là gì?

Câu hỏi phỏng vấn thuật toán Python

Cấu trúc dữ liệu động là cấu trúc dữ liệu có kích thước không cố định. Chúng là một tiện ích quan trọng đối với các lập trình viên vì trong hầu hết các tình huống, bạn sẽ không biết chính xác một cấu trúc dữ liệu cụ thể yêu cầu bao nhiêu bộ nhớ. Trong tình huống đó, cấu trúc dữ liệu động có thể được sử dụng để thêm bớt phần tử mới một cách dễ dàng.  

Tại sao phân tích thuật toán lại quan trọng?

Phân tích thuật toán là quá trình đánh giá khả năng tính toán của một thuật toán cụ thể và xác định xem nó có thể phục vụ một trường hợp sử dụng cụ thể hay không. Điều này rất quan trọng cần thực hiện trước bất kỳ dự án lập trình nào vì nó ngăn chặn những thách thức không lường trước được và cho người lập trình ý tưởng về những gì họ có thể đạt được với một thuật toán cụ thể.  

Giải thích danh sách liên kết kép (DLL)

Danh sách liên kết kép là một biến thể của danh sách liên kết trong đó mọi phần tử trỏ đến cả phần tử trước nó và phần tử sau nó. Thật dễ dàng để điều hướng một danh sách được liên kết kép cả về phía trước và phía sau vì lý do này

Mỗi mục trong một danh sách liên kết đôi có những điều sau đây.  

  • Một trường dữ liệu để mang một giá trị dữ liệu cụ thể
  • Một liên kết đến mục trước đó trong danh sách
  • Một liên kết đến mục tiếp theo trong danh sách

Các ứng dụng của danh sách liên kết đôi là gì?

Bất kỳ ứng dụng nào mà bạn yêu cầu điều hướng tiến và lùi nhanh chóng đều có thể sử dụng danh sách liên kết kép. Một số ví dụ bao gồm.  

  • Các hành động bạn đã thực hiện trong ứng dụng chỉnh sửa hình ảnh có thể được lưu trữ trong danh sách được liên kết kép để cho phép thực hiện từng thao tác hoàn tác/làm lại.  
  • Các cấu trúc dữ liệu phức tạp hơn như cây nhị phân và bảng băm có thể được xây dựng bằng danh sách liên kết kép.  
  • Các trang kết quả của công cụ tìm kiếm có thể được liên kết với nhau bằng danh sách liên kết kép.  

Giải thích ngăn xếp cùng với các ứng dụng của nó

Ngăn xếp là một cấu trúc dữ liệu trong đó các phần tử được đặt chồng lên nhau và việc thêm và xóa chỉ có thể xảy ra ở trên cùng. Ngăn xếp có thể được sử dụng trong các ứng dụng sau.  

  • Một ngăn xếp có thể được sử dụng trong các ứng dụng mà người dùng được phép quay lại các thao tác trước đó một bước hoặc tiến lên với một thao tác mới.  
  • Chuyển đổi biểu thức trung tố thành biểu thức hậu tố
  • Quá trình đảo ngược các ký tự trong một chuỗi có thể được hoàn thành bằng cách đặt chúng vào một ngăn xếp và sử dụng thao tác bật lên.  

Xác định biểu thức Postfix

Biểu thức hậu tố là một định dạng để sắp xếp toán tử và toán hạng trong đó toán tử luôn được đặt sau toán hạng. Sau đây là một ví dụ về biểu thức hậu tố.  

ab+cd-*

Phiên bản trung tố của biểu thức này là.  

(a+b)*(c-d)

Câu hỏi phỏng vấn cấu trúc dữ liệu cấp cao

Bạn có ý nghĩa gì bởi hàng đợi?

Hàng đợi là một cấu trúc dữ liệu tuân theo logic Nhập trước Xuất trước (FIFO) cho các hoạt động, có nghĩa là phần tử đầu tiên được đưa vào hàng đợi sẽ được thao tác trước.  

Một hệ thống lập lịch trình là một ví dụ điển hình về ứng dụng của hàng đợi. Hãy tưởng tượng một môi trường máy tính nơi tài nguyên CPU đang được chia sẻ bởi nhiều người. Trong trường hợp đó, công việc mà họ muốn thực hiện có thể được xếp vào một hàng đợi, với các lệnh đến trước sẽ được hàng đợi thực hiện trước.  

Dequeue là gì?

Câu hỏi phỏng vấn thuật toán Python

Dequeuing là một thao tác có thể được thực hiện trên một hàng đợi trong đó một phần tử ở đầu hàng đợi được loại bỏ hoặc truy cập cho một thao tác.  

Stack và Queue có giống nhau không?

Ngăn xếp và hàng đợi là các cấu trúc dữ liệu khác nhau. Sự khác biệt chính giữa chúng là.  

  • Ngăn xếp tuân theo logic nhập trước xuất trước trong khi hàng đợi sử dụng logic nhập trước xuất trước.  
  • Bạn chỉ có thể chèn và xóa các phần tử ở đầu ngăn xếp. Mặt khác, các phần tử được thêm vào ở một đầu của hàng đợi và bị xóa ở đầu kia.  
  • Ngăn xếp chỉ sử dụng một con trỏ, đó là đỉnh của ngăn xếp. Hàng đợi cần hai con trỏ để giải quyết mặt trước của hàng đợi và mặt sau của hàng đợi.  
  • Ngăn xếp chủ yếu được sử dụng trong các vấn đề yêu cầu đệ quy trong khi hàng đợi được sử dụng tốt hơn trong các ứng dụng yêu cầu xử lý tuần tự.  

Quá trình đằng sau việc lưu trữ các biến trong bộ nhớ là gì?

Cách đơn giản nhất để lưu trữ bất cứ thứ gì trong bộ nhớ của máy tính là sử dụng một biến. Một biến đại diện cho một phần dữ liệu, chẳng hạn như một ký tự hoặc một số. Các biến giúp viết chương trình dễ dàng hơn vì bạn có thể tham khảo các giá trị theo tên của chúng và viết các chương trình hoặc hàm chung hoạt động với bất kỳ giá trị nào.  

Cách các biến được lưu trữ tùy thuộc vào ngôn ngữ lập trình đang được sử dụng. Một số ngôn ngữ lập trình yêu cầu khai báo biến và một số khác thì không. Có một số ngôn ngữ lập trình trong đó các biến chỉ có thể thuộc một loại nhất định trong khi các ngôn ngữ khác linh hoạt hơn.  

Làm cách nào để triển khai hàng đợi bằng ngăn xếp?

Bạn có thể triển khai hàng đợi bằng cách sử dụng ngăn xếp bằng cách thực hiện thao tác enqueue hoặc dequeue tốn kém. Trong mỗi ví dụ bên dưới, chúng ta sẽ giả sử hai ngăn xếp, s1 và s2. Ngăn xếp s1 chứa dữ liệu mà chúng ta đang làm việc trong khi ngăn xếp s2 dành cho lưu trữ dữ liệu tạm thời.  

Phương pháp Enqueue

Bước 1. Nếu s1 trống thì đẩy phần tử đầu tiên của ngăn xếp vào s1.  

Bước 2. Nếu s1 không trống, thì đẩy từng phần tử một vào s2. Bây giờ lấy phần tử đầu tiên và đặt nó vào s1, sau đó lấy tất cả các phần tử trong s2 và đặt nó trở lại s1.  

Do đó, chúng tôi đã đảm bảo rằng phần tử đầu tiên luôn ở trên cùng và tất cả các phần tử khác theo sau nó.  

Phương pháp xếp hàng

Bạn có thể triển khai hàng đợi bằng cách sử dụng ngăn xếp bằng cách thực hiện thao tác dequeue tốn kém theo cách sau.  

Bước 1. Nếu s1 trống, thì không thực hiện bất kỳ thao tác nào trên dữ liệu. Chỉ cần trả về một thông báo lỗi nói rằng ngăn xếp trống.  

Bước 2. Nếu s1 không trống, thì lấy tất cả các phần tử trong ngăn xếp đó và đặt chúng vào s2 từng cái một. Xóa phần tử đầu tiên trong s2 và di chuyển tất cả các phần tử trong s2 vào s1.  

Bằng cách di chuyển tất cả các phần tử trong s1 sang s2, chúng tôi đã xoay sở để đảo ngược thứ tự của các giá trị dữ liệu. Bây giờ phần tử đầu tiên trong hàng đợi ở trên cùng của s2, chúng ta có thể sử dụng chức năng pop để loại bỏ nó.  

Làm cách nào bạn có thể triển khai ngăn xếp bằng cách sử dụng hàng đợi?

Câu hỏi phỏng vấn thuật toán Python

Bạn có thể triển khai ngăn xếp bằng cách sử dụng hàng đợi bằng cách thực hiện thao tác đẩy hoặc bật tốn kém. Dưới đây là các thuật toán cho cả hai phương pháp.  

Làm cho hoạt động đẩy tốn kém

Chúng tôi sử dụng hai hàng đợi (q1 và q2) để triển khai ngăn xếp bằng cách làm cho thao tác đẩy tốn kém.  

  • Chúng tôi bắt đầu bằng cách di chuyển tất cả các phần tử từ q1 sang q2
  • Tiếp theo, liệt kê phần tử mới vào q1
  • Chuyển tất cả các phần tử trong q2 trở lại q1

Làm cho hoạt động Pop tốn kém

  • Di chuyển tất cả các phần tử trừ phần tử cuối cùng từ q1 sang q2
  • Xóa phần tử cuối cùng còn lại trong q1
  • Di chuyển tất cả các phần tử từ q2 trở lại q1

Sự khác biệt giữa thao tác Push và Pop là gì?

Đẩy và bật là các hoạt động được tiến hành trên ngăn xếp. Thao tác đẩy thêm một phần tử vào ngăn xếp. Mặt khác, thao tác pop loại bỏ các phần tử khỏi ngăn xếp.  

Thuật toán sắp xếp nào được coi là nhanh nhất?

Câu hỏi phỏng vấn thuật toán Python

Quicksort thường được coi là thuật toán sắp xếp nhanh nhất. Nó có độ phức tạp thời gian tốt nhất là O(n log n) và độ phức tạp thời gian của nó trong trường hợp xấu nhất là O(n^2). Tuy nhiên, nó được coi là thuật toán sắp xếp nhanh nhất vì nó có độ phức tạp thời gian trường hợp trung bình là O(n logn), nhanh hơn các thuật toán khác.  

Hợp nhất sắp xếp là gì và nó được thực hiện như thế nào?

Hợp nhất sắp xếp thuộc về một loại thuật toán sắp xếp được gọi là phương pháp phân chia và chinh phục. Nó chia danh sách các phần tử thành hai nửa và sau đó áp dụng đệ quy kỹ thuật sắp xếp hợp nhất trên mỗi nửa, sau đó hợp nhất hai phần sau khi sắp xếp chúng riêng lẻ.  

Sau đây là thuật toán cho một sắp xếp hợp nhất.  

Câu hỏi phỏng vấn thuật toán Python

Bạn có thể giải thích hoạt động của Sắp xếp lựa chọn không?

Sắp xếp lựa chọn tuân theo một quy trình đơn giản để sắp xếp danh sách các phần tử. Để bắt đầu, danh sách được chia thành hai phần. Phần bên trái được sắp xếp và phần bên phải chưa được sắp xếp. Ban đầu, danh sách chưa được sắp xếp nên chỉ có phần tử đầu tiên ở bên trái.  

Sau đó, chúng tôi quét mảng và tìm phần tử nhỏ nhất. Phần tử đó được hoán đổi với phần tử đầu tiên và trở thành một phần của mảng đã sắp xếp. Sau đó, chúng tôi lặp lại quy trình này với phần tử thứ hai, v.v. Hình ảnh sau đây mô tả quá trình.  

Câu hỏi phỏng vấn thuật toán Python

Xác định phân tích tiệm cận của một thuật toán

Một phân tích tiệm cận xác định hiệu suất thời gian chạy toán học của các thuật toán khác nhau. Thông qua phân tích tiệm cận, chúng tôi có thể thiết lập các trường hợp tốt nhất, trường hợp xấu nhất và trường hợp trung bình cho các thuật toán.  

Giải thích các ký hiệu tiệm cận

Các ký hiệu sau đây được sử dụng trong phân tích tiệm cận của các thuật toán.  

Ký hiệu Big Oh

Ký hiệu oh lớn, O(n), mô tả giới hạn trên cho thời gian chạy của thuật toán. Do đó, nó mô tả độ phức tạp thời gian trong trường hợp xấu nhất của một thuật toán.  

Ký hiệu Omega

Đây là giới hạn dưới hoặc trường hợp tốt nhất cho thời gian chạy của thuật toán.  

Ký hiệu theta

Ký hiệu theta kết hợp cả thời gian chạy giới hạn trên và giới hạn dưới của thuật toán.  

Bảng băm trong cấu trúc dữ liệu là gì?

Bảng băm là một cấu trúc dữ liệu trong đó dữ liệu được lưu trữ cùng với một chỉ mục, là nơi phần tử được lưu trữ trong bộ nhớ. Điều này làm cho bảng băm rất giống với mảng, ngoại trừ các giá trị dữ liệu được lưu trữ cùng với thông tin về vị trí của chúng trong bộ nhớ.  

Bạn có thể sử dụng một đối tượng làm khóa trong HashMap không?

Có, bạn có thể sử dụng một đối tượng làm khóa trong HashMap.  

Bạn có thể lưu trữ khóa trùng lặp trong HashMap không?

Bạn không thể lưu khóa trùng lặp trong HashMap.  

Hashmap xử lý xung đột trong Java như thế nào?

Hashmap xử lý xung đột trong Java bằng cách sử dụng danh sách được liên kết để ghi lại các mục đã được đặt trong cùng một vị trí mảng. Nhưng từ Java 8 trở đi, việc chuyển đổi đã được thực hiện để sử dụng cây cân bằng cho cùng một mục đích thay vì danh sách được liên kết.  

Độ phức tạp về thời gian của các hoạt động cơ bản Nhận () và Đặt () trong Lớp Hashmap là gì?

Các thao tác lấy và đặt có độ phức tạp về thời gian là O(1) trong Hashmap giả định rằng các cặp khóa-giá trị được phân bổ đồng đều trên mảng hoặc nhóm.  

Giải thích việc triển khai LRU Cache bằng cấu trúc dữ liệu

Câu hỏi phỏng vấn thuật toán Python

Hai cấu trúc dữ liệu được sử dụng để triển khai bộ đệm LRU. Đầu tiên là hàng đợi, được triển khai bằng danh sách liên kết. Cái còn lại là hàm băm, giữ số trang làm khóa và giá trị của hàm băm là địa chỉ của nút hàng đợi tương ứng.  

Nếu một trang cụ thể được tham chiếu và có sẵn trong bộ nhớ, thì nút của danh sách sẽ được tách ra và được đặt ở đầu hàng đợi. Nếu một trang cụ thể được yêu cầu và không có trong bộ nhớ, thì nó sẽ được đưa vào bộ nhớ.  

Có những trường hợp hàng đợi trở nên đầy, trong trường hợp đó, chúng tôi xóa một nút ở phía sau hàng đợi và thêm một nút mới ở phía trước.  

Làm quen với các sinh viên kỹ thuật phần mềm khác

Câu hỏi phỏng vấn thuật toán Python

Abdelkareem ElSharief

Kỹ sư phần mềm tại Bread

Đọc truyện

Câu hỏi phỏng vấn thuật toán Python

Matthew Dillon

Nhà phát triển giao diện người dùng tại LaunchBadge

Đọc truyện

Câu hỏi phỏng vấn thuật toán Python

Alyssa menes

Kỹ sư phần mềm tại Progyny

Đọc truyện

Xác định cấu trúc dữ liệu cây

Cây là một cấu trúc dữ liệu phân cấp trong đó một nút trung tâm phân nhánh thành các nút con. Mỗi nút phụ có thể có nút dẫn riêng

Cây nhị phân là gì?

Cây nhị phân là một loại triển khai cây trong đó mỗi nút có thể có tối đa hai nút con hoặc nút con. Hai đứa trẻ được gọi là con trái và con phải.  

Viết hàm đệ quy để tính chiều cao của cây nhị phân trong Java

Để tìm chiều cao của cây nhị phân, chúng ta duyệt chiều dài của nó theo trình tự sau. Sau đó, chúng tôi tính toán chiều cao của các cây con bên trái và bên phải, chúng tôi có thể kết hợp chúng để xác định chiều cao của toàn bộ cây nhị phân. Mã Java sau đây có thể được sử dụng để đạt được điều đó.  

Câu hỏi phỏng vấn thuật toán Python

Số nút tối đa trong cây nhị phân có chiều cao K là bao nhiêu?

Số nút tối đa trong cây nhị phân có độ cao k là 2k-1, trong đó k lớn hơn hoặc bằng 1.  

Mô tả các loại duyệt cây khác nhau cho cây tìm kiếm nhị phân

Có ba cách để đi qua một cái cây. họ đang.  

Truyền đơn đặt hàng

Đi qua cây bắt đầu từ cây con bên trái, sau đó đến gốc của cây và kết thúc ở cây con bên phải.  

Truyền tải đặt hàng trước

Đặt hàng trước bắt đầu từ gốc, sau đó di chuyển đến cây con bên trái và cuối cùng là cây con bên phải.  

Truyền tải sau khi đặt hàng

Điều này liên quan đến việc che cây bắt đầu từ cây con bên trái và di chuyển sang cây con bên phải. Sau đó, bạn di chuyển từ cây con bên phải đến gốc để hoàn thành quá trình truyền tải.  

Cây tìm kiếm nhị phân là gì?

Cây tìm kiếm nhị phân là một triển khai cây đặc biệt trong đó các nút bên trong lưu trữ các khóa lớn hơn các khóa trong cây con bên trái và nhỏ hơn các khóa trong cây con bên phải.  

Tìm kiếm nhị phân có tốt hơn tìm kiếm tuyến tính không?

Có, tìm kiếm nhị phân hiệu quả hơn tìm kiếm tuyến tính. Nó có độ phức tạp thời gian là O(log n) trong khi độ phức tạp thời gian của tìm kiếm tuyến tính là O(n)

Xác định cây AVL

Cây AVL là cây tìm kiếm nhị phân có chiều cao tự cân bằng. Điều này đạt được bằng cách thiết kế nó sao cho sự khác biệt về chiều cao của cây con bên trái và cây con bên phải không bao giờ vượt quá một đối với bất kỳ nút nào.  

Giải thích cấu trúc dữ liệu đồ thị

Biểu đồ là một cấu trúc dữ liệu trong đó một tập hợp các nút được kết nối với một số hoặc tất cả các nút khác thông qua các cạnh. Kết quả là, đồ thị là cấu trúc dữ liệu phi tuyến tính.  

Các ứng dụng của cấu trúc dữ liệu đồ thị là gì?

Biểu đồ có thể được sử dụng trong nhiều tình huống khác nhau. Điều đó bao gồm.  

  • Trong các ứng dụng bản đồ, nơi giao điểm của hai con đường được chỉ định là một nút
  • Các ứng dụng truyền thông xã hội khái niệm hóa các mạng người dùng bằng cách chỉ định mỗi người dùng là một nút và bạn bè của họ là các nút mà họ được kết nối với.  
  • Internet có thể được hình dung dưới dạng biểu đồ, trong đó mỗi trang liên kết đến trang khác có một cạnh kết nối với nó trong biểu đồ.  

Làm thế nào để bạn đại diện cho một đồ thị?

Hai cách phổ biến nhất để biểu diễn đồ thị là sử dụng danh sách kề và ma trận kề.  

Ma trận kề là một mảng hai chiều trong đó mỗi hàng và cột đại diện cho một đỉnh cụ thể của đồ thị. Nếu tồn tại một cạnh giữa hai đỉnh bất kỳ, thì mục tương ứng trong mảng được chỉ định bởi 1. Nếu không, nó được chỉ định bởi một 0.  

Danh sách kề biểu diễn đồ thị dưới dạng một mảng danh sách liên kết. Như bạn có thể thấy trong hình bên dưới, mỗi nút trong biểu đồ sẽ trở thành một phần tử chỉ mục trong danh sách được liên kết. Và mỗi phần tử chỉ mục được kết nối với các nút giống như trong biểu đồ, nhưng lần này là trong danh sách được liên kết.  

Câu hỏi phỏng vấn thuật toán Python

Làm thế nào để bạn phân biệt giữa cấu trúc dữ liệu cây và đồ thị?

Sau đây là những khác biệt chính giữa cây và đồ thị.  

  • Cây có một nút gốc mà từ đó tất cả các nút khác bắt nguồn. Đồ thị không có nút gốc.  
  • Các đỉnh trong đồ thị có thể có các kết nối hai chiều. Chỉ có một đường đi duy nhất giữa hai đỉnh trong cây.  
  • Các nút trong biểu đồ có thể kết nối với chính chúng, điều này không thể thực hiện được trong cây.  
  • Cây là cấu trúc dữ liệu phân cấp trong khi biểu đồ là mạng phẳng.  

Bạn có thể phân biệt giữa cây B và cây B+ không?

Sau đây là những khác biệt giữa cây B và cây B+.  

  • Cả nút trong và nút lá trong cây B đều có con trỏ. Chỉ các nút lá trong cây B+ mới có con trỏ
  • Tìm kiếm cây B+ nhanh hơn vì các khóa luôn nằm trong các nút lá. Các khóa của cây B không nhất thiết phải nằm trong nút lá và kết quả là việc tìm kiếm mất nhiều thời gian hơn.  
  • Cây B không duy trì bản sao của các khóa trong cây. Cây B+ duy trì các khóa trùng lặp.  
  • Các nút dẫn của cây B+ được lưu trữ dưới dạng danh sách liên kết cấu trúc. Đây không phải là trường hợp của cây B

Sự khác biệt giữa Tìm kiếm theo chiều rộng (BFS) và Tìm kiếm theo chiều sâu (DFS) là gì?

Tìm kiếm theo chiều rộng sử dụng cấu trúc dữ liệu hàng đợi để tìm đường đi ngắn nhất trong biểu đồ. Tìm kiếm theo chiều sâu thực hiện tương tự nhưng sử dụng cấu trúc dữ liệu ngăn xếp.  

Làm thế nào để bạn biết khi nào nên sử dụng DFS qua BFS?

Phương pháp tìm kiếm bạn sử dụng sẽ phụ thuộc vào độ sâu của nút bạn đang tìm kiếm. Nếu nút nông, thì bạn nên sử dụng BFS. Nhưng nếu có nhiều cạnh giữa nguồn và nút mà quá trình tìm kiếm đang được tiến hành, thì bạn nên sử dụng DFS.  

Sắp xếp tô pô trong đồ thị là gì?

Sắp xếp tô pô là một cách sắp xếp các đỉnh trong biểu đồ. Các đỉnh được sắp xếp sao cho nếu có một cạnh từ đỉnh v1 đến đỉnh v2 thì v1 được đặt trước v2 theo thứ tự sắp xếp tô pô

Cấu trúc dữ liệu Heap là gì?

Heap là một cấu trúc dữ liệu dựa trên cây. Các đống được xây dựng theo cách mà chúng là các cây nhị phân hoàn chỉnh, có nghĩa là tất cả các mức đều được lấp đầy và mọi nút đều được căn trái.  

Lợi thế của một đống trên một ngăn xếp là gì?

Đống phân bổ bộ nhớ động, đó là lý do tại sao chúng linh hoạt hơn ngăn xếp. Bạn không cần khởi tạo heap với kích thước bộ nhớ cụ thể. Với heap, bạn có thể thêm các phần tử khi đang di chuyển và heap sẽ thích ứng với các yêu cầu lưu trữ mới.  

Phân bổ bộ nhớ động có thể trợ giúp trong việc quản lý dữ liệu không?

Có, cấp phát bộ nhớ động có thể giúp quản lý dữ liệu. Làm việc với dữ liệu dễ dàng hơn khi nó có thể được gán động cho các vị trí bộ nhớ.  

Mảng lởm chởm là gì?

Mảng lởm chởm là một mảng của các mảng, có nghĩa là mảng này chứa các mảng khác. Các mảng trong một mảng lởm chởm có thể có độ dài khác nhau.  

Sự khác biệt giữa Null và Void là gì?

Khi một biến được gán là null, điều đó có nghĩa là nó là một giá trị rỗng. Mặt khác, một con trỏ trống là một con trỏ ban đầu không có bất kỳ kích thước nào.  

Chế độ xem bên trái của cây nhị phân là gì?

Chế độ xem bên trái của cây nhị phân là tất cả các nút mà bạn truy cập khi duyệt qua cây từ phía bên trái của nó.  

Cấu trúc dữ liệu và thuật toán Câu hỏi phỏng vấn cho người dùng Python

Sự khác biệt giữa Danh sách và Tuple [Trong Python] là gì?

Câu hỏi phỏng vấn thuật toán Python

Tóm lại, danh sách có thể thay đổi (có thể sửa đổi) trong khi bộ dữ liệu là bất biến (không thể sửa đổi). Các danh sách được sắp xếp theo một chỉ mục trung tâm, trong khi một bộ có thể chứa nhiều loại dữ liệu cùng nhau ở dạng giống như chỉ mục

Từ điển hoặc danh sách tra cứu nhanh hơn?

Câu hỏi này kiểm tra khả năng nắm bắt của bạn về các hàm ý đối với cấu trúc dữ liệu Python và các thuật toán mà bạn có thể triển khai trên chúng. Danh sách chậm hơn để tra cứu. sẽ mất O(N) thời gian vì việc lọc qua một giá trị sẽ yêu cầu lọc qua mọi giá trị trong danh sách trong trường hợp xấu nhất. Từ điển được thiết lập tốt với các cặp khóa-giá trị, tương tự như bảng băm. Do đó, thời gian để tìm kiếm sẽ là O(1) miễn là bạn có khóa chính xác

Ba cách khác nhau để tìm nạp mọi mục thứ ba trong danh sách là gì?

Có ba cách khác nhau để làm điều này. thông qua hàm năng suất, khả năng hiểu danh sách hoặc vòng lặp for. Cả ba đều được thể hiện ở đây

Sử dụng tính năng hiểu danh sách, in các số lẻ từ 0 đến 100

Khả năng hiểu danh sách là một tính năng trong Python cho phép chúng ta làm việc với các thuật toán trong cấu trúc dữ liệu danh sách mặc định trong Python. Ở đây, chúng tôi đang tìm kiếm các số lẻ

Câu hỏi phỏng vấn thuật toán Python

Khả năng hiểu danh sách cho phép chúng tôi đơn giản hóa phạm vi và thuật toán lọc để chúng tôi có thể đóng gói nó thành một dòng mã. Đoạn mã này trả về mọi phần tử trong khoảng từ 0 đến 100 nếu nó chia hết cho 2

Bạn nên chuẩn bị để mô tả việc hiểu danh sách một cách chi tiết và đúng ký hiệu.  

Viết một biểu thức chính quy xác nhận Id email bằng mô-đun biểu thức chính quy Python “Re”?

Khi nói đến các thuật toán Python, rất nhiều công việc thường được trừu tượng hóa bởi các cấu trúc dữ liệu mặc định tích hợp sẵn hoặc các phương thức dễ dàng có thể được gọi trong một dòng. Các thuật toán biểu thức chính quy, được sử dụng để lọc qua các lựa chọn văn bản, thường là một trong những thuật toán khó nắm bắt nhất. Bạn sẽ phải làm quen với các quy tắc biểu thức chính quy trong Python để có thể viết ra câu trả lời

Câu hỏi phỏng vấn thuật toán Python

Câu hỏi phỏng vấn về cấu trúc dữ liệu và thuật toán dành cho người dùng JavaScript

Kết quả của “10”+20+30 trong JavaScript là gì?

Câu hỏi phỏng vấn này kiểm tra kiến ​​thức của bạn về nguyên hàm dữ liệu JavaScript, loại dữ liệu có thể được cấu thành thành các cấu trúc dữ liệu khác nhau trong Python. Trong trường hợp này, đó là sự kết hợp giữa kiểu dữ liệu chuỗi và số. Biết rằng kết quả sẽ là 102030 thay vì 60 có nghĩa là bạn hiểu rằng khi một loại chuỗi được gọi bằng toán tử + trong JavaScript, hành vi tự động là biến nó thành một toán tử nối

Chỉ bằng cách đảm bảo rằng mọi thứ tương tác với toán tử + là một số hoặc kiểu dữ liệu BigInt, bạn mới có thể đảm bảo rằng hành vi bổ sung mong muốn sẽ xảy ra

Điều gì sẽ là đầu ra của mã dưới đây?

Câu hỏi phỏng vấn thuật toán Python

Câu hỏi này kiểm tra kiến ​​thức của bạn về mảng và cách chúng tương tác với các loại dữ liệu khác nhau. Trong trường hợp này, bạn nên hiểu rằng độ dài của mảng cây sẽ vẫn là năm, ngay cả sau khi thực hiện chức năng xóa. Hàm xóa chỉ cần lấy mục được lập chỉ mục thứ ba (vì các mảng JavaScript được lập chỉ mục 0, điều này có nghĩa là “maple” hoặc phần tử thứ tư) và làm cho nó không được xác định. Độ dài của mảng bên dưới vẫn như cũ, nó chỉ chứa một phần tử không xác định thay vì chuỗi “maple”

Làm cách nào để thêm phần tử vào đầu mảng?

Bạn phải sử dụng mặc định. push() để thêm thứ gì đó vào cuối mảng, trong khi bạn có thể sử dụng phương thức mặc định. unshift() để thêm thứ gì đó vào đầu. Biết câu trả lời này giúp chứng minh rằng bạn hiểu cách hoạt động cơ bản của mảng

Vòng lặp For-In trong JavaScript là gì?

Vòng lặp for-in là một phần cơ bản của việc lặp qua các cấu trúc dữ liệu. Bạn sẽ có thể mô tả cú pháp của nó cho người phỏng vấn mà không do dự

Câu hỏi phỏng vấn thuật toán Python

Đây là trường hợp triển khai vòng lặp for-in trong JavaScript. Bạn sẽ lặp qua một mảng bằng cách thay thế tên đối tượng bằng tên mảng, sau đó đặt đoạn mã lặp bên trong khối

Chức năng mũi tên là gì?

Các hàm mũi tên là một cách ngắn gọn và súc tích để viết các hàm trong ES6 trở lên. Chúng là một cách để bạn cô đọng logic thuật toán của mình. Ví dụ sau đây mô tả một hàm mũi tên chỉ in “xin chào” trong bảng điều khiển JavaScript

Câu hỏi phỏng vấn thuật toán Python

Câu hỏi và trả lời phỏng vấn về cấu trúc dữ liệu [Chung]

Giới thiệu bản thân

Làm cho câu trả lời này ngắn và rõ ràng. Nói về nền tảng giáo dục và chuyên môn của bạn với tư cách là nhà phát triển. Bao gồm một số thông tin về niềm đam mê của bạn đối với khoa học máy tính và các ứng dụng của nó. Tránh đi vào nền tảng cá nhân hoặc sở thích của bạn bên ngoài công việc bạn đang ứng tuyển, trừ khi bạn được yêu cầu rõ ràng.  

Bạn biết gì về cấu trúc dữ liệu?

Đây là cơ hội để nói về cấu trúc dữ liệu là gì và tại sao chúng không thể thiếu đối với bất kỳ dự án tính toán có thể mở rộng nào. Giải thích điều gì khiến chúng trở nên quan trọng và cách chúng có thể hướng dẫn bạn với tư cách là một lập trình viên. Bạn có thể đặt tên cho một vài cấu trúc dữ liệu khác nhau nhưng không cần phải đi quá sâu vào chi tiết cụ thể của từng loại.  

Tại sao bạn lại chọn nghề nghiệp trong lĩnh vực phát triển phần mềm?

Một cách để trả lời câu hỏi này là giải thích lần đầu tiên bạn quan tâm đến phần mềm như thế nào và mô tả một số chương trình đầu tiên bạn viết. Sau đó nói về một số dự án cá nhân hoặc đóng góp mã nguồn mở mà bạn đã thực hiện để chứng minh sự quan tâm của bạn đối với lĩnh vực này.  

Dự án thử thách nhất mà bạn gặp phải trên hành trình học tập của mình là gì?

Hãy trung thực khi trả lời câu hỏi này. Bắt đầu bằng cách mô tả dự án và những gì bạn đang cố gắng đạt được. Sau đó mô tả những thách thức bạn gặp phải và những lỗ hổng trong học tập của bạn. Kết thúc bằng cách giải thích cách bạn lấp đầy những khoảng trống đó và hoàn thành dự án.  

Câu hỏi tình huống dựa trên sơ yếu lý lịch

Dưới đây là một số câu hỏi có thể phát sinh dựa trên những gì trong sơ yếu lý lịch của bạn.  

Một câu hỏi phổ biến là liệu bạn có thể làm việc với một ngôn ngữ lập trình cụ thể hay không mặc dù không có nhiều kinh nghiệm với nó. Nếu bạn được hỏi điều này, hãy trấn an nhà tuyển dụng bằng cách cho họ biết rằng bạn là người tự học và sẵn sàng học hỏi những điều mới trong công việc. Bạn có thể đưa ra ví dụ cụ thể về thời điểm bạn đã làm điều đó trong quá khứ.  

Những khoảng trống trong sơ yếu lý lịch của bạn cũng có thể dẫn đến các câu hỏi từ nhà tuyển dụng. Nếu bạn có một khoảng cách, sau đó giải thích nó một cách trung thực. Hầu hết các công ty không quan tâm đến khoảng trống trong sơ yếu lý lịch miễn là nó hợp lý.  

Câu hỏi thường gặp về cấu trúc dữ liệu

Làm thế nào để bạn chuẩn bị cho cuộc phỏng vấn Kỹ sư/Nhà phát triển phần mềm?

Điều quan trọng là phải xem qua bản mô tả công việc và xác định những gì công ty đang tìm kiếm ở một kỹ sư phần mềm hoặc nhà phát triển phần mềm. Bắt đầu chuẩn bị của bạn cho phù hợp. Ví dụ: nếu mô tả công việc đề cập đến Python và thuật toán, thì hãy nghiên cứu cả hai chủ đề đó. Bắt đầu bằng cách làm việc với họ một cách rộng rãi và sau đó xem qua các câu hỏi phỏng vấn phổ biến nhất dành cho họ.  

Phát triển phần mềm có phải là một nghề nghiệp tốt?

Phát triển phần mềm có thể là một lựa chọn nghề nghiệp tuyệt vời vì nhiều lý do. Đây là một lĩnh vực luôn có nhu cầu cao và tương đối sinh lợi. Nó cũng mang đến cho bạn cơ hội làm việc trong nhiều loại ngành và vai trò khác nhau.  

Bạn nên trả lời như thế nào “Tại sao chúng tôi nên thuê bạn làm Nhà phát triển phần mềm?”

Khi nhà tuyển dụng đặt câu hỏi này, họ đang muốn tìm hiểu xem bạn có phù hợp với công ty hay không. Bạn cần thể hiện rằng bạn hiểu những gì công ty làm và vai trò của bạn sẽ là gì. Hãy chắc chắn rằng bạn nghiên cứu công ty và biết những gì nó cung cấp. Nếu có thể, hãy kết nối với một nhà phát triển trong công ty để tìm hiểu về công việc của họ và văn hóa của nhóm. Bao gồm những phát hiện của bạn trong câu trả lời của bạn và giải thích lý do tại sao bạn là ứng cử viên hoàn hảo cho công việc

Vì bạn đang ở đây…
Bạn đang xem xét sự nghiệp trong lĩnh vực công nghệ phần mềm? . Nếu bạn vẫn đang cân nhắc, hãy thử lộ trình học kỹ thuật phần mềm miễn phí của chúng tôi và xem hướng dẫn về tiền lương của chúng tôi để xem bạn có thể kiếm được những gì.

Giới thiệu về Sakshi Gupta

Sakshi là Phó tổng biên tập cấp cao tại Springboard. Cô ấy là một người đam mê công nghệ, thích đọc và viết về công nghệ mới nổi. Cô là một nhà tiếp thị nội dung và có kinh nghiệm làm việc tại thị trường Ấn Độ và Hoa Kỳ

Tải xuống hướng dẫn về lương kỹ sư phần mềm năm 2022 của chúng tôi

Xem xét kỹ hơn các yếu tố ảnh hưởng đến bồi thường trong công nghệ phần mềm. Đi trước đối thủ với các mẹo và thủ thuật phỏng vấn xin việc, cùng với lời khuyên về cách giành được vai trò hoàn hảo

Làm thế nào để giải quyết các câu hỏi phỏng vấn thuật toán?

Cách tìm giải pháp cho các vấn đề phỏng vấn viết mã .
Hình dung vấn đề bằng cách vẽ nó ra.
Hãy suy nghĩ về cách bạn sẽ giải quyết vấn đề bằng tay​.
Hãy đến với nhiều ví dụ hơn.
Chia câu hỏi thành các phần độc lập nhỏ hơn.
Áp dụng các cấu trúc dữ liệu và thuật toán phổ biến vào bài toán​

Thuật toán được sử dụng trong Python như thế nào?

Khoa học dữ liệu thực tế sử dụng Python . Các thuật toán thường được tạo độc lập với các ngôn ngữ cơ bản, tôi. e. một thuật toán có thể được thực hiện bằng nhiều ngôn ngữ lập trình. Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order to get the desired output. Algorithms are generally created independent of underlying languages, i.e. an algorithm can be implemented in more than one programming language.

Một câu hỏi phỏng vấn thuật toán là gì?

Câu hỏi phỏng vấn về thuật toán dành cho người có kinh nghiệm .
Các thuật toán mã hóa hoạt động như thế nào?.
Một số thuật toán mật mã được sử dụng rộng rãi nhất là gì?.
Mô tả thuật toán sắp xếp hợp nhất. .
Mô tả thuật toán sắp xếp nhanh. .
Mô tả thuật toán sắp xếp bong bóng với sự trợ giúp của một ví dụ

Câu hỏi phỏng vấn Python tốt là gì?

Câu hỏi phỏng vấn Python .
Trăn là gì?
Ngôn ngữ gõ động là gì?
Ngôn ngữ thông dịch là gì?
PEP 8 là gì và tại sao nó quan trọng?
Phạm vi trong Python là gì?
danh sách và bộ dữ liệu là gì?.
Các kiểu dữ liệu tích hợp phổ biến trong Python là gì?
Vượt qua trong Python là gì?