Algo Vision
458 subscribers
340 photos
64 videos
5 files
114 links
Computer Vision - Algorithm
for commercial questions @mlenginer
Download Telegram
Keep pushing boundaries, debugging, and building the future one line of code at a time.
🤣91👻1
Loyihada arxitektura juda ko'pgina narsani hal qilishi mumkin.
Yomon tuzilgan arxitektura keyinchalik muammolar keltirib chiqaradi.
Jamoa productivligini tushurishi mumkin.
Imkon qadar code yozishdan oldin loyihani qay darajada kengayishini oldindan bilib ushanga mos arxitektura tanlash kerak.
9👍3🔥1
Завтра жду вас
А где вы ?
🔥6❤‍🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Graflar nazariyasi asosida tuzilgan.
Yandex Go dagi avtomobilni biriktirish tizimi
🔥14👍1
Super puper kod deb shunga aytishadi.
😁192🐳1
What is a Priority Queue?

Prioritetga ega bulgan navbat.
Navbat - bu oddiy hayotdagi navbat . Dasturlashdagi navbat xuddi
hayotdagi navbatga asoslanib ishlaydi.
Masalan kim birinchi kelsa unga birinchi xizmat kursatilishi kerak.
Bu prinsip FIFO (First In First Out) deyiladi.

Endi esa prioritet tushunchasini tushuntirishga harakat qilaman.

Aytaylik navbatda ko'pchilik turishibdi. Lekin navbat endi oldingidek birinchi kelganga birinchi xizmat kursatish qoidasi ishlamaydi.
Masalan yoshi kattalarga oldin xizmat kursatiladi.
Yoki aytaylik nogironligi bor odamlarga.
Yoki qupolroq bulsada o'zini qarindoshlariga mansabdor shaxslarga ....
Ana shunda odamning yoshi, nogironligi, mansabi ... prioritet hisoblanadi.

Bu maxsus Malumotlar strukturasi hisoblanadi. Demak deyarli barcha dasturlash tillarida uning shablon(Generic) kurinishi mavjud.

Xo'sh bu malumotlar strukturasi o'zi nimasi buyicha effectiv bulishi kerak?
Bu oddiy massivlar asosida tuzilmaydi. shu sabab oddiy navbatdan farq qiladi.

Demak prioritet buyicha malumot qushish (push) O(logN)
Prioritet buyicha malumot olish (top) O(1)
va Prioritet buyicha malumotni o'chirish ham O(logN)


Bugun leetcode ga qarab bular esimga tushdi shunchaki bulishdm.

You are given a 0-indexed integer array nums and an integer k. You have a starting score of 0.

In one operation:

choose an index i such that 0 <= i < nums.length,
increase your score by nums[i], and
replace nums[i] with ceil(nums[i] / 3).

Return the maximum possible score you can attain after applying exactly k operations.

The ceiling function ceil(val) is the least integer greater than or equal to val.


Agar yaxshiroq etibor bersak biz maksimal summa yigishimiz uchun har doim eng maksimal elementni olib keyin uni
ceil(a/3) qismiga o'zgartirishimiz kerak.
Lekin chegaraga qarasak n,k<=10^5
demak k = 10^5 bulsa va massivda ham shuncha element bulsa
biz har bir marta eng katta elementni topishimiz kerak O(n)
agar bu ishni k marta amalga oshirsak k*n=n^2 bu esa 10^10 buladi.
Urtacha SHK zamonaviy protsessori sekundiga 10^6~10^7 amal bajaradi.
10^10/10^7=10^3 sekund vaqt kerak buncha amalni bajarish uchun.

Ana shunda bizga (Heap yokin Binary Heapga asoslangan) Priority Queue yordamga keladi.
Biz maksimal elementni prioritet deb olsak demak K marta maksimal elementni olish uchun O(K*LOGN) amal kerak.
Bu maksimum 10^5*LOG10^5 =~10^6 amal

class Solution {
public:
long long maxKelements(vector<int>& nums, int k) {
ios::sync_with_stdio(false);
cin.tie(nullptr);

std::priority_queue<int> queue;
for(const auto& num: nums){
queue.push(num);
}

long long sum = 0;
while(k--){
sum += static_cast<long long> (queue.top());
auto cur = std::ceil(queue.top() / 3.0);
queue.pop();
queue.push(cur);
}
return sum;
}
};

Qolgan dasturlash tillaridaham xuddi shu tarzda buladi (Deyarli barchasida Priority_Queue bor)
3🔥3👍2🏆2
Priority Queue da element qushish nimaga teng?
Anonymous Poll
26%
O(1)
51%
O(LogN)
15%
O(N)
8%
O(N^2)
Bu yilgi masalalar ogirmi yoki men produktiv masalalarga utib qoldimikan?
Yandex CUP birinchi qismi boshlandi.
4 masaladan 2 tasini zurga yechdim u yam birinchisida muammo bor.
hali 2 soatdan kuproq vaqtim bor.
Siz ham ishlayapszmi?
🔥4
Yandex Cup dagi oxirgi (Backend) masala to'gridan to'gri backend bilan aloqador hisoblanadi.
Python, Node.js, C#, Javada so'rovlar bilan ishlash uchun judaham yaxshi standart kutubxonalar bor.
Lekin kimdir C++ ishlayman desachi?
Albatta C++ daham ajoib kutubxonalar mavjud.
Xuddi Python ning requests kutubxonasiga uxshagan va juda sodda bulgan
cpr yane C++ requests
Json uchun esa NlohmanJson
Ularni qushish oldin build yane yigish kerak.
Yigish judayam oson shunchaki git repolariga kirsiz hammasi yozilgan.

Nlohman
✳️CPR-C++ requests


Ikkala kutubxona ham juda tez ishlaydi.

Ularni shunchaki CMake faylingizga quyidagicha qushing.
cmake_minimum_required(VERSION 3.29)
project(untitled4)

set(CMAKE_CXX_STANDARD 20)

find_package(nlohmann_json REQUIRED)
find_package(cpr REQUIRED)

add_executable(untitled4 main.cpp
first.cc)

target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json)
target_link_libraries(${PROJECT_NAME} PRIVATE cpr::cpr)

Va bemalol ishlatishiz mumkin.
#include <iostream>
#include <cpr/cpr.h>
#include <nlohmann/json.hpp>

using json = nlohmann::json;

int main() {
try {
cpr::Response response = cpr::Get(cpr::Url{"https://jsonplaceholder.typicode.com/posts/1"});

if (response.status_code != 200) {
throw std::runtime_error("Error HTTP: " + std::to_string(response.status_code));
}

try {
json response_json = json::parse(response.text);

std::cout << "ID: " << response_json["id"] << std::endl;
std::cout << "Title: " << response_json["title"] << std::endl;
std::cout << "Body: " << response_json["body"] << std::endl;

} catch (const json::parse_error& e) {
throw std::runtime_error("Error parsing Json: " + std::string(e.what()));
}

} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}

return 0;
}
🔥74
Yandex Cup dan yarim finalga kimlar chiqdi?
🔥 - yarim finaldaman.
😐 - keyingi yil Insha Allah.
Reaksiya qoldiring.
😐24🔥6🐳5
2501. Longest Square Streak in an Array

You are given an integer array nums. A subsequence of nums is called a square streak if:

The length of the subsequence is at least 2, and
after sorting the subsequence, each element (except the first element) is the square of the previous number.

Return the length of the longest square streak in nums, or return -1 if there is no square streak.
A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.


Qisqacha qilib tushuntirsam bizga massiv berilgan. Shu massivdan shunday eng uzun qism massivni (elementlari har xil joydan bulsaham buladi)
topishimiz keraki uni o'sish tartibida tartiblaganimizda birinchidan keyingi elementlari o'zidan oldingi element kvadratiga teng bulsin.
shuni uzunligini qaytarishimiz kerak.

Masalan [4, 3, 6, 16, 8, 2]
Bunda eng uzun shartga mos keladigan qism massiv [4, 16, 2] tartiblasak [2, 4. 16]
4=2^2
16 = 4^2

Masalaga bir nechi xil yechim bersak buladi.
Masalan eng oddiy brut force - yane to'gridan to'gri yechim
Har bitta elementdan boshlab uni kvadratga oshirib shu kvadrat berilgan massivda bor yoki yuqligini tekshiramiz.
Agar bulsa yana shu amalni bajarimiz.
Misol uchun
[4, 3, 6, 16, 8, 2]
1) 4 dan boshlaymiz.
4 ni bitta element.
4^2 = 16 massivda bor elementlar soni +1
16^2=256 massivda yuq Demak umiy 2 ta
2) 3 dan boshlaymiz
3 ni uzi bitta element
3^2 = 9 yuq.
Demak umumiy bitta oldingisida 2 ta edi max(2, 1) = 2
........................
Bu albatta eng sodda yechim.
class Solution {
public:
int longestSquareStreak(vector<int>& nums) {
std::unordered_set<long long> mp;

for(const auto& num: nums){
mp.insert(static_cast<long long>(num));
}

int mx = 0;
for(const auto& num: nums){
int cnt = 1;
long long cur = static_cast<long long>(num);
while(mp.count(cur * cur)){
cur = cur * cur;
cnt++;
}

mx = std::max(cnt, mx);
}
return (mx != 1) ? mx : -1;
}
};

Lekin biz bu yechimni yanada optimallashtira olamiz.
Ayni paytda 2, 4, 16 qism ketma ketlik 3 marta tekshiriladi.
yane birinchi 4 16
keyin 16
keyin 2 4 16
Biz oldindan berilgan massivni tartiblasak unda binary search ishlata olamizmi?
O'zi binary search nima?
- Binary search ishlatsak buladi.
✳️ - Yana boshqa yechimlar bor
👍21
Set-To'plam agar hash asosida tuzilgan bulsa unga malumot bor yoki yuqligini aniqlash asimptotikasi nimaga teng?

For a set built on hashing, what is the asymptotic complexity for determining whether an element exists in it?
Anonymous Quiz
19%
O(N)
48%
O(1)
19%
O(N^2)
15%
O(LogN)
👍5
Bazida velosiped tuzib chiqish (Yane hamma narsani qo'lda yozish) kerak bo'lsa (Customize)
lekin ko'pgina holatlarda bu zararli hisoblanadi. Chunki bu bizni productivligimizga jiddiy tasir kursatadi.
Qo'lda yozish odatda o'rganish yoki biror bir kamchiliklarni to'ldirish maqsadida amalga oshiriladi.

Misol uchun oddiygina masala Massivdan ikkilamchi elementlarni o'chirish muammosini ko'ramiz.

Masala shartini uqib chiqsak unda massiv o'suvchan ekanligini kurishimiz mumkin.
O'suvchan massivda bir xil elementlar ketma ket bulishi aniq.
Shunchaki ularni olib oxiriga joylashtirib keyin yangi massivga utkazsak buldi.

Albatta buni qo'limizda yozib massivni elementlarini siljitib amalga oshirishimiz mumkin.

Yoki dasturlash tilidagi tayor funksionaldan ham foydalanish mumkin. Bazi dasturlash tillari standart boy algoritmlardan tashkil topgan
agar biz ishlatayotgan instrument -dasturlash tilida shu imkoniyat standart mavjud bulsa u holda shunchaki undan foydalanish kifoya.

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
auto last = std::unique(nums.begin(), nums.end());
nums.erase(last, nums.end());
return nums.size();
}
};
👍54
LeetCode 139. Single Number

Bir qarashda juda oson tuyuladigan bu masalani ko'ramiz.
Masala shartiga binoan bizga bir nechta elementlardan tashkil topgan butun sonli massiv berilgan.
Massivda bitta elementdan tashqari qolgan barchasi ikki martadan qatnashgan. Shu bir marta qatnashgan elementni topish talab qilinmoqda.

Masalan: [3,2,3,1,1] da natija 2 chunki u bir marta qatnashadi.
Chegaraga etibor bersak 1<=array.length <= 3 * 10 ^4


Demak eng sodda yechim sifatida brute force - yane perebor qilish miyaga keladi.
Yane har bitta elementni ikkinchisini topamiz agar topmasak demak shu elementni qaytaramiz.

Yane
1) Oddiy brute force yechim
n=array.length
i=0..n-1
j=i..n
gacha agar array[i] == array[j] bulsa belgilab olamiz
oxirida shu belgiga asoslanib yo davom etamiz yoki shu joyda tuxtatib ekranga chop etamiz.

Lekin Dict (Map) yane lugat malumotlar tuzilmasi ham mavjud.
Shu asosida kalid(key) ni elementni olsak qiymat(value) sifatida shu element
nechi marta qatnashganini olamiz.
class Solution {
public:
int singleNumber(vector<int>& nums)
{
unordered_map<int,int> num;
for (auto i:nums)
{
num[i]++;
}

for(auto i:num)
{
if(i.second==1)
return i.first;
}
return -1;
}
};

map ni Hash ga asoslangan versiyasidan foydalanmoqdamiz. Demak
unga element qushish O(1) (O'rtacha)
Umumiy O(array.length) + asimptotika (yane amallar soni)
lekin Xotira jihatidan biz ortiqcha yana array.length ta element egalladik.

Xush shu oddiy masalani maksimal optimizatsiya qilsak buladimi?
Albatta bo'ladi.
Binar amallar haqida hammamizni xabarimiz bulsa kerak.
Ularni ichida garoib XOR (Qatiy Mantiqiy yoki) amali mavjud.
A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Binar XOR jadvali yuqorida keltirilgan. Agar unga etibor bersak bir xil holatda 0 har xil bulgan holatda esa 1 kelib chiqmoqda.
Agar sonlar ustida bajarsak chi?
Masalan 12 va 12 ikkalasi ustida XOR bajarsak
1100 (12)
XOR
1100 (12)
-----------
0000 (Natija har doim 0)
Demak natija 0 endi etibor bering. Agar 0 bilan biror sonni ustida XOR bajarsakchi?
100 (4)
XOR
000 (0)
-----------
100 (4)

Natija sonni uzi.
Shuning uchun massivdagi har bir element ustidan bu amalni bajarsak bir xil elementlar bir birini 0 ga tenglashtiradi.
Natijada faqat yolgiz (SINGLE NUMBER) qoladi.
class Solution {
public:
int singleNumber(const std::vector<int>& nums) {
int xorr = 0;
for (const auto& num : nums) {
xorr ^= num;
}
return xorr;
}
};

Bu yechim har tomonlama yaxshi. Ham ortiqcha xotira yuq. Ham yechim O(array.length)
15👍5
#include <iostream>
#include <vector>
#include <string>

class Quiz {
private:
std::vector<std::pair<std::string, std::string>> questions;
int score = 0;

public:
Quiz() {
questions = {
{"What is 2 + 2?", "4"},
{"What is the capital of France?", "Paris"},
{"Who wrote '1984'?", "George Orwell"}
};
}

void runQuiz() {
for (const auto& [question, answer] : questions) {
std::cout << question << " ";
std::string userAnswer;
std::getline(std::cin, userAnswer);
if (userAnswer == answer) {
score++;
}
}
std::cout << "You scored " << score << " out of " << questions.size() << "!\n";
}
};

int main() {
Quiz quiz;
quiz.runQuiz();
return 0;
}
🔥4🥰3👍2🆒2
1🔥1👌1
Algo Vision
#include <iostream> #include <vector> #include <string> class Quiz { private: std::vector<std::pair<std::string, std::string>> questions; int score = 0; public: Quiz() { questions = { {"What is 2 + 2?", "4"}, {"What…
SRP — Single Responsibility Principle

Yane bitta component bitta vazifada bo'lishi kerak.
Agar bizning componentimiz sinf bulsa demak u bitta vazifa uchun javobgar bulishi kerak.
Lekin component faqatgina sinf emas balki funksiya va shunga o'xshashlar ham bo'lishi mumkin.

Kodda Quiz sinfi ham savollar tuzilishiga
ham ularning biznes logikasiga (yane bajarilishiga ) javob bermoqda bu esa SRP ga zid.

Mantiqan fikrlasak bizni jarayonimizni qo'yidagi komponentalarga bo'lsak maqul bo'lar edi.

#include <iostream>
#include <vector>
#include <string>

class Question {
public:
std::string questionText;
std::string correctAnswer;

Question(const std::string& text, const std::string& answer)
: questionText(text), correctAnswer(answer) {}
};

class QuizManager {
private:
std::vector<Question> questions;
int score = 0;

public:
QuizManager(const std::vector<Question>& q) : questions(q) {}

void runQuiz() {
for (const auto& q : questions) {
std::cout << q.questionText << " ";
std::string userAnswer;
std::getline(std::cin, userAnswer);
if (userAnswer == q.correctAnswer) {
score++;
}
}
}

int getScore() const { return score; }
int getTotalQuestions() const { return questions.size(); }
};

class QuizUI {
public:
static void displayResult(int score, int totalQuestions) {
std::cout << "You scored " << score << " out of " << totalQuestions << "!\n";
}
};

int main() {
std::vector<Question> questions = {
{"What is 2 + 2?", "4"},
{"What is the capital of France?", "Paris"},
{"Who wrote '1984'?", "George Orwell"}
};

QuizManager quizManager(questions);
quizManager.runQuiz();

QuizUI::displayResult(quizManager.getScore(), quizManager.getTotalQuestions());

return 0;
}

Question faqat savol uchun.
QuizManager esa asosiy logika uchun
QuizUI esa Natijalar uchun
4👍4🏆42🔥2
SOLID
Open/Closed Principle
The Open/Closed Principle states that:
Code should be open for extension — new functionality can be added.
Code should be closed for modification — existing code should not be changed.

This ensures code stability and easier maintenance. Instead of changing old code, we add new code.
Below is an example that violates the Open/Closed Principle (OCP). In this example, every time a new type of message is added, the existing code must be modified, which makes it less maintainable and more prone to bugs.

The second example shows a correct implementation of the Open/Closed Principle. Instead of modifying existing code, new behavior is added by extending the base class. This approach makes the code more flexible and easier to maintain.
Remember to write clean and readable code

#include <iostream>
#include <string>

// Function that violates OCP by using if-else for each message type
class MessageHandler {
public:
void handle(const std::string& type, const std::string& message) {
if (type == "text") {
std::cout << "Handling text message: " << message << '\n';
} else if (type == "error") {
std::cerr << "Handling error message: " << message << '\n';
} else {
std::cout << "Unknown message type: " << message << '\n';
}
}
};

int main() {
MessageHandler handler;
handler.handle("text", "Hello, World!");
handler.handle("error", "Something went wrong.");
handler.handle("info", "New message type!"); // Adding new types requires modifying the method
return 0;
}

#include <iostream>
#include <string>
#include <memory>
#include <vector>

// Base class that defines the interface
class MessageHandler {
public:
virtual ~MessageHandler() = default;
virtual void handle(const std::string& message) const = 0;
};

// Handler for text messages
class TextMessageHandler : public MessageHandler {
public:
void handle(const std::string& message) const override {
std::cout << "Handling text message: " << message << '\n';
}
};

// Handler for error messages
class ErrorMessageHandler : public MessageHandler {
public:
void handle(const std::string& message) const override {
std::cerr << "Handling error message: " << message << '\n';
}
};

int main() {
std::vector<std::shared_ptr<MessageHandler>> handlers;
handlers.emplace_back(std::make_shared<TextMessageHandler>());
handlers.emplace_back(std::make_shared<ErrorMessageHandler>());

for (const auto& handler : handlers) {
handler->handle("Hello, World!"); // No need to change the existing code
}

return 0;
}
🔥7💯3👍2👌211
Forwarded from OSON
OSON terminallari orqali xayriya qiling💙

Endi bu juda oson!
OSON termanallari yoki mobil ilova orqali masjidlar qurilishiga, nogiron bolalar va mehribonlik uylariga xayriya qilish imkoniyatingiz bor.

OSON - birgalikda yaxshilik qilamiz!🫶

_________

Совершайте благотворительность через терминалы OSON💙

Теперь это очень просто!
С помощью терминалов OSON или мобильного приложения вы можете жертвовать на строительство мечетей, для детей с ограниченными возможностями и в дома милосердия.

OSON — творим добро вместе! 🫶

📞Qo'llab quvvatlash xizmati


Instagram 📱 | Telegram 📱 | Facebook 📱

Yuklab olish:
IOS 📱 Android 📱

Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
7🆒3👍21